Cron 作业从晚上 11 点到早上 6 点每分钟运行一次

Cron 作业从晚上 11 点到早上 6 点每分钟运行一次

我有一个 python 程序,需要从晚上 11 点(美国东部时间)到早上 6 点(美国东部时间)每分钟运行一次。我如何安排一个 cron 作业来执行此操作?

* 23-6 * * 1-5 python my_program.py

这行得通吗?或者我必须为此编写 2 个单独的 cron 作业吗?

答案1

像这样环绕的范围是不明确的。而是指定时间23,0-6并避免将来出现问题。

Cron 每分钟检查 crontab 文件的内容,如果发现时间和条件相符,它将运行该行指示的脚本。

对于这种情况,必须满足以下一组巧合:

  • 晚上 11 点至晚上 11:59 以及凌晨 0:00 至 6:59
  • 从周一到周五

因此,在这组巧合成立期间的每一分钟,它都会运行。

不要指望它会在小时和天数范围表明,例如周六

答案2

您给出的时间表不明确,特别是因为cronUnix/Linux 系统上有几种不同的实现。我强烈建议您指定两个范围来满足午夜的环绕(但请注意,根据小时范围超过午夜的 crontab 条目AT&T/BSDcron实现无法处理范围列表)。

然而,也许更重要的是,您的定义将从 2300(晚上 11 点)到 0659(上午 6.59)每分钟运行您的程序,这比要求晚了几乎一个小时。它也只会在周一至周五 ( 1-5) 期间运行。如果您希望脚本从周一晚上 11 点开始运行,但在周六早上 6 点停止,则需要以下条目:

* 23  * * 1-5 python my_program.py    # 11pm-midnight Mon-Fri
* 0-5 * * 2-6 python my_program.py    # midnight-5.59am Tue-Sat
0 6   * * 2-6 python my_program.py    # 6am Tue-Sat

最后,请注意,cron通常使用系统默认时区运行,这不一定是您交互使用的时区。可能需要进行一些测试以确保您的晚上 11 点至凌晨 6 点与cron晚上 11 点至凌晨 6 点的想法相符。

答案3

这将运行你的工作每一分钟每周第 1 至 5 天晚上 11:00 至凌晨 06:59。

这里 1 ==> 星期一,5 ==> 星期五。

但是,cron 会检查是否满足每个条件,并且在周五,它会在午夜 12 点停止,因为周六不包括在这些日子中。在所有其他日子里,它都会正常工作。

答案4

将此 bash 脚本保存到 /etc/opt/ranger.sh:

currenttime=$(date +%H:%M)
if [[ "$currenttime" > "23:00" ]] || [[ "$currenttime" < "06:00" ]]; then
        run my Python script
fi

然后添加这个 cronjob 条目:

* * * * * /etc/opt/ranger.sh

相关内容