我有一个 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
您给出的时间表不明确,特别是因为cron
Unix/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