【问题标题】:Run a command every 6 min in Bash [duplicate]在 Bash 中每 6 分钟运行一次命令 [重复]
【发布时间】:2016-01-04 18:44:44
【问题描述】:

我想每 6 分钟安排一次类似 ./example 的命令,当 6 分钟完成时,它会退出进程并再次运行。我将如何在 Bash 中做到这一点?我运行 CentOS。

【问题讨论】:

  • 为什么会有赞成票?有吗?

标签: bash centos


【解决方案1】:

我会让 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

【讨论】:

    【解决方案2】:

    在下面的脚本中替换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 作为终止此序列的一种方式。

    【讨论】:

    • 当然,这个解决方案应该被systemd、supervisord或者类似的监控。
    • @EmilVikström:如果这是关键任务,您可能想要这样做。否则你可能不想打扰它。
    猜你喜欢
    • 2014-12-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多