每 24 小时运行一次 cron 并立即启动

Yoh*_* AI 2 python cron centos6

我想每 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
Run Code Online (Sandbox Code Playgroud)

但是在 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.)
Run Code Online (Sandbox Code Playgroud)

试过 ps -ax | grep python

没有运行python脚本

那么如何每 24 小时运行一次脚本并立即启动呢?我的机器在 centos 6.4 上运行,谢谢

Mad*_*ter 9

你这样做是错误的。 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
Run Code Online (Sandbox Code Playgroud)

这个微小的 shellscript 计算从现在到下一个午夜之间剩余的秒数,减去十秒(我几乎肯定可以做得更优雅,但是c'est la vie)。然后它在后台启动您的 python 作业并进入睡眠状态,因此在 23:59:50 醒来,然后终止后台作业并退出。对于更专业的方法,该作业还应该在启动时检查另一个副本是否正在运行,如果是,则终止(对您的监控系统有错误)。

您可以每天在午夜从 cron 安全地启动一次

0 0 * * *  /usr/local/bin/noddy-printer-script
Run Code Online (Sandbox Code Playgroud)

您也可以立即从 shell 启动它,因为它会相应地调整睡眠间隙。

请注意,Nikhil_CV 在上面提出了一个很好的观点;*/24并不意味着在 25 之前每小时,而是意味着当小时为 0 或 24 时,因为后者永远不会发生意味着仅当 hour=0 时,这就是为什么您的工作不在上午 10 点运行的原因。下一个午夜来,cron将在接下来的一个小时内每分钟开始一份工作副本,这可能不是您想要的。另请注意,您的 CentOS 6 机器无可救药地已过期且易受攻击,您应该立即将其升级到 C6.9。