Cron Job 每 14 天(或每隔一个星期二)执行一次

Cron Job 每 14 天(或每隔一个星期二)执行一次

我想每隔一个星期二早上 05.15 运行一个命令。有没有办法做到这一点?

答案1

周二 05:15 运行作业的 cron 计划是

15 5 * * 2

或使用日期名称(可能并非所有地方都支持),

15 5 * * tue

让命令在该计划触发时每秒运行一次的最简单方法是让 cron 作业将其状态保留为临时文件。如果该文件存在,则会将其删除,但该作业不会执行其他操作。如果该文件不存在,则运行该命令,然后作业创建该文件。

所以你的日程安排可能是这样的:

15 5 * * 2 if [ -e /tmp/statefile ]; then rm -f /tmp/statefile; else cmd; touch /tmp/statefile; fi

显然(?)如果将业务逻辑封装在由 cron 计划触发的 shell 脚本中,这会更清晰:

15 5 * * 2 /some/path/cron-wrapper

shellcron-wrapper脚本可能如下所示:

#!/bin/sh

statefile=/tmp/statefile

if [ -e "$statefile" ]; then
    rm -f "$statefile"
    exit
fi

cmd # the command we want to run

touch "$statefile"

请注意,这不会注意保留命令的退出状态(cmd在上面的示例中)。如果您需要这样做,例如让 cron 通知您运行失败,请确保您的包装器脚本以命令的退出状态退出:

#!/bin/sh

statefile=/tmp/statefile

if [ -e "$statefile" ]; then
    rm -f "$statefile"
    exit
fi

cmd # the command we want to run
err=$?

touch "$statefile"

exit "$err"

您要在此处使用的确切逻辑取决于您的要求。例如,您是否希望在命令失败时避免创建状态文件?您可能还希望在安全位置的其他位置创建状态文件,该位置不太可能被维护脚本清除,并且不太可能覆盖其他数据或被同一计算机上运行的其他项目覆盖。

其他做到这一点的方法是采用某种形式的日期计算,如当前接受的类似问题的答案中所述:每隔一周通过 cron 运行一个脚本

相关内容