cron 无法执行容器相关命令无效

想通过定时任务再容器里执行脚本,但再配置的过程中发现定时任务一直没有生效,后来发现问题出现在-it上,先把错误的命令贴上来

#!/bin/bash
/usr/local/bin/nerdctl -it exec nginx "/root/logrotate.sh"

本来想执行这个脚本触发容器里的日志轮转,但是一直没有生效,问 GPT 也没有给出来一个准确答案,后来搜索了一下发现是-it引起的,修改成如下内容就可以了

#!/bin/bash
/usr/local/bin/nerdctl exec nginx "/root/logrotate.sh"

问了 GPT,GPT 解释如下:

TTY(终端)是用户与计算机之间进行交互的接口,它提供了输入和输出的终端设备。cron 任务不依赖 TTY 的原因在于,它们是在后台自动运行的,而不需要与用户进行实时交互。

当你设置一个 cron 任务时,你指定了一个时间表和要执行的命令或脚本。这些任务被安排在操作系统的 cron 守护进程下执行,它负责按照预定的时间表触发任务。

当 cron 守护进程触发任务执行时,它会创建一个新的进程,并在其中执行指定的命令或脚本。这个新进程与 TTY 无关,因为它并不需要用户输入或与用户进行交互。

在这种情况下,输入和输出是通过其他方式处理的。cron 任务的输出通常被重定向到文件中,可以在任务设置中指定输出的目标文件。你可以在任务的命令或脚本中使用重定向操作符(如 >)来将输出写入指定的文件。

除了输出重定向外,cron 任务也可以将输出通过电子邮件发送给指定的收件人。这需要在 cron 任务的设置中配置邮件通知,并确保系统已经配置了发送电子邮件的功能。

综上所述,cron 任务在没有 TTY 的情况下执行,是因为它们是在后台自动运行的,不需要与用户进行交互。它们的输出可以通过重定向到文件或通过电子邮件通知来处理。

所以我理解的原因就是:因为加了-it之后会分配伪终端(pseudo-TTY),但是 cron 不通过 TTY 执行,所以他就无法进到这个这个 TTY 取执行任务,导致任务不生效,能看到的就是日志里 cron 确实去执行了,但是是任务自动停止了还是跳过了就不知道。

cron 无法执行容器相关命令无效
https://www.linuxstudynotes.com/2023/06/02/cron/cron%e6%97%a0%e6%b3%95%e6%89%a7%e8%a1%8c%e5%ae%b9%e5%99%a8%e7%9b%b8%e5%85%b3%e5%91%bd%e4%bb%a4%e6%97%a0%e6%95%88/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇