【发布时间】:2016-01-04 18:44:44
【问题描述】:
我想每 6 分钟安排一次类似 ./example 的命令,当 6 分钟完成时,它会退出进程并再次运行。我将如何在 Bash 中做到这一点?我运行 CentOS。
【问题讨论】:
-
为什么会有赞成票?有吗?
我想每 6 分钟安排一次类似 ./example 的命令,当 6 分钟完成时,它会退出进程并再次运行。我将如何在 Bash 中做到这一点?我运行 CentOS。
【问题讨论】:
我会让 cronjob 每六分钟运行一次,并使用 timeout 命令在 5 分 50 秒后杀死它。
这是一个示例 crontab 规则:
*/6 * * * * cd /path/to/your/file && timeout -s9 290s ./example
它将工作目录更改为您的脚本所在的位置,然后执行该脚本。请注意,我使用 -s9 标志向它发送信号 9 (SIGKILL),这意味着“立即终止”。在大多数情况下,您可能需要考虑发送 SIGTERM,它告诉脚本“正常退出”。如果是这种情况,您可以考虑通过进一步减小超时值来给脚本更多的退出时间。要发送 SIGTERM 而不是 SIGKILL,只需删除 -s9 标志。
您可以通过运行 crontab -e 来编辑您的 crontab
【讨论】:
在下面的脚本中替换mycommand...
#! /bin/bash
## create an example command to launch for demonstration purposes
function mycommand { D=$(date) ; while true ; do echo $D; sleep 1s ; done; }
while true
do
mycommand & PID=$!
sleep 6m
kill $PID ; wait $PID 2>/dev/null
done
每六分钟,这会杀死命令然后重新启动它。
使用 Ctrl-C 作为终止此序列的一种方式。
【讨论】: