我想每 24 小时运行一次 Python 脚本,每到 23:59:58 时我想终止该作业。我想立即运行 Python。因此我使用以下语法
* */24 * * * cd /ftp/ftp1 && timeout -s 9 86398 python2.6 lpr_10.10.252.121.py 10.10.252.121 450 >> res_10.10.252.121.txt
但在 cron 日志中,他们的脚本没有运行。我尝试/etc/rc.d/init.d/crond restart
以下是 cron 日志
May 18 10:13:45 cisco-cumc crontab[31368]: (root) REPLACE (root)
May 18 10:13:45 cisco-cumc crontab[31368]: (root) END EDIT (root)
May 18 10:14:01 cisco-cumc crond[5090]: (root) RELOAD (/var/spool/cron/root)
May 18 10:15:24 cisco-cumc crontab[31449]: (root) BEGIN EDIT (root)
May 18 10:15:42 cisco-cumc crontab[31449]: (root) REPLACE (root)
May 18 10:15:42 cisco-cumc crontab[31449]: (root) END EDIT (root)
May 18 10:15:46 cisco-cumc crontab[31451]: (root) LIST (root)
May 18 10:15:57 cisco-cumc crond[5090]: (CRON) INFO (Shutting down)
May 18 10:15:57 cisco-cumc crond[31471]: (CRON) STARTUP (1.4.4)
May 18 10:15:57 cisco-cumc crond[31471]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
May 18 10:15:57 cisco-cumc crond[31471]: (CRON) INFO (running with inotify support)
May 18 10:15:57 cisco-cumc crond[31471]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
尝试过ps -ax | grep python
没有运行 Python 脚本
那么如何每 24 小时运行一次脚本并立即启动?我的机器运行的是 centos 6.4,谢谢
答案1
你的做法是错误的。 cron
旨在在已知的未来时间无人看管的情况下启动作业;它不是为现在启动它们而设计的,也不是为停止它们而设计的。当你折磨一个工具去做一些它不应该做的事情时,你可能会陷入混乱,就像你现在的情况一样。
让作业自行关闭。考虑类似
#!/bin/bash
cd /ftp/ftp1
let pause=86400+`date +%s -d 0000`-`date +%s`-10
python2.6 lpr_10.10.252.121.py 10.10.252.121 450 >> res_10.10.252.121.txt &
sleep $pause
kill -15 %1
exit 0
这个小小的 shellscript 计算了从现在到下一个午夜还剩多少秒,减去十秒(我几乎可以做得更优雅,但是这就是生活)。然后它在后台启动你的 Python 作业并休眠几秒钟,因此在 23:59:50 醒来,然后终止后台作业并退出。为了更专业的方法,作业还应在启动时检查是否有另一个副本正在运行,如果正在运行,则终止(并向监控系统发送错误)。
您可以从 cron 安全地启动一次一天的午夜:
0 0 * * * /usr/local/bin/noddy-printer-script
您也可以从 shell 立即启动它,因为它会相应地调整睡眠间隙。
请注意,Nikhil_CV 在上面提出了一个很好的观点;但这*/24
并不意味着每小时一次,直至 25但相反当小时为 0 或 24 时,因为后者永远不会发生,这意味着仅当小时=0,这就是为什么你的作业在上午 10 点没有运行。到了下一个午夜,cron
将在接下来的一个小时内每分钟启动一份作业副本,这可能不是你想要的。还请注意,你的 CentOS 6 盒子是完全没有补丁,而且很脆弱您应该立即将其提升至 C6.9。