题
*/5 * * * * my command
这项工作,但每5分钟就得到执行的两次,为什么?
在 /var/log/cron
它显示:
Jun 16 22:20:01 Test CROND[12512]: (root) CMD (my command)
Jun 16 22:20:01 Test CROND[12516]: (root) CMD (my command)
所以它不是从两个用户。
它只是进入了一次 crontab -e -u root
.该命令是php命令。
解决方案
什么都没有说明使人们有理由为它执行的两倍。看看其他地方。
- 做两个用户的电话吗?
- 是它进入的两倍?
- 不叫?
- 它设置在行动条件的重复?
如果它是一个壳脚本执行,它追加 whoami
和 date
日志的文件。你应当能够挖掘的理由。
更新
类型ps-A,确保crond没有运行两次。
其他提示
crontab中的wget通常限制为15分钟。在我们的情况下,情况就是如此,在这15分钟之后,作业最终会超时,然后立即重新运行。因此,解决方法是在crontab中设置cronjob,如下所示:
1 2 * * * root wget --read-timeout=3600 -O - 'http://cron-job-url' >/dev/null 2>&1
...而不是
1 2 * * * root wget -O - 'http://cron-job-url' >/dev/null 2>&1
所以,wget就是这样。含义3600 = 1小时。或者更多,如果你需要!
如果它是您安装的应用程序的命令,可能已经将相同的条目添加到 / etc / crontab
或 /etc/cron.d/<something>
我做了确认-我cron也运行两次...
Jul 24 14:40:01 localhost cron[2713]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:41:01 localhost cron[9481]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:41:01 localhost cron[10724]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:42:01 localhost cron[20380]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:42:01 localhost cron[20832]: (root) CMD (/etc/apache2/generator/reloader.do)
我务
查询-R/var/卷轴/-e reloader
/var/spool/cron/crontabs/root:* * * * * /etc/apache2/generator/reloader.do
输出:
whoami
date
------
输出:
root
root
Tue Jul 24 14:46:02 CEST 2012
---------
Tue Jul 24 14:46:03 CEST 2012
---------
我目前的解决方法是:
if [ -f /etc/apache2/generator/reloader.lock ]
then
exit
fi
touch /etc/apache2/generator/reloader.lock
/etc/apache2/generator/reloader
rm /etc/apache2/generator/reloader.lock
但这不是答案为什么这就是发生...
系统的巴布亚 Cron-vixie-cron
部分的 ps aux wwf
输出(共进午餐的内部cron任务)
root 10843 0.0 0.0 16480 560 ? Ss Jun06 0:01 /usr/sbin/cron
root 29797 0.0 0.0 25020 964 ? S 15:08 0:00 \_ /usr/sbin/cron
root 29799 0.0 0.0 9188 1228 ? Ss 15:08 0:00 \_ /bin/bash /etc/apache2/generator/reloader
root 29822 0.0 0.0 14800 988 ? R 15:08 0:00 \_ ps aux wwf
------
root 8215 0.0 0.0 16480 836 ? Ss 14:23 0:00 /usr/sbin/cron
root 31419 0.0 0.0 25020 968 ? S 15:08 0:00 \_ /usr/sbin/cron
root 31423 0.0 0.0 9188 1228 ? Ss 15:08 0:00 \_ /bin/bash /etc/apache2/generator/reloader
root 31431 0.0 0.0 14804 1004 ? R 15:08 0:00 \_ ps aux wwf
编辑:
我也注意到,这一计划过程的报告Jun06作为开始日期(今天是Jun24)
root 10843 0.0 0.0 16480 560 ? Ss Jun06 0:01 /usr/sbin/cron
root 8215 0.0 0.0 16480 836 ? Ss 14:23 0:00 /usr/sbin/cron
第二个进程的报告正确地(服务器uprime是-40分钟-我有没有重新启动它免得) 一个重要的信息-这是V-服务器上运行的主机。
无论我做什么(/etc/init。d/vixie-cron重新启动)它开始的同PID
解决:
我已经找到了理由。一个V-服务器运行两次不同的上下文。可能的解释的-有人已经改变的环境,同时机是运行,其结果是,不是所有的进程被打死,什么;s更多-他们有没有影响的新实例vserver(下文303和3031):
root 10843 3031 developer 0.0 0.0 16480 560 ? Ss Jun06 0:01 /usr/sbin/cron
root 16509 303 developer 0.0 0.0 16480 836 ? Ss 15:18 0:00 /usr/sbin/cron
我期的进程,并解决了问题。
可以肯定的是,它不是导致它运行两次的crontab条目。找出正在发生的事情的最快方法是在cron作业脚本中添加一些调试。如果你什么都不做,那么默认情况下cron输出将被邮寄到 root @ localhost
(除非你把它配置为不同),所以假设你有root访问权限,那么在脚本中添加一些调试信息,例如:
echo "Script starting"
date
whoami
并查看输出。这将让你开始弄清楚这是如何被调用两次。
我遇到了同样的问题,在我的情况下,我错误地初始化了两次cron服务。在我停止了cron #/ etc / init.d / crond stop
并再次启动#/ etc / init.d / crond start
之后,它运行得很好。
我希望这可以帮助任何人。
看起来你有两个crond正在运行,一个用PID 12512,另一个用PID 12516。
我使用OpenWrt。
我有同样的问题,但我只有一个cron: ps | grep crond:
31447 root 1508 S /usr/sbin/crond -c /etc/crontabs -l 8
31454 root 1500 S sh -c ps | grep crond
31456 root 1496 S grep crond
logread | grep cron
May 27 13:15:01 decibox cron.info crond[31447]: crond: USER root pid 1594 cmd /root/check_connect.php.sh
May 27 13:20:01 decibox cron.info crond[31447]: crond: USER root pid 2103 cmd /root/check_connect.php.sh
May 27 13:20:01 decibox cron.info crond[31447]: crond: USER root pid 2325 cmd /root/check_connect.php.sh
May 27 13:25:01 decibox cron.info crond[31447]: crond: USER root pid 2880 cmd /root/check_connect.php.sh
由于conf文件中的双重输入,我遇到了同样的问题:
# grep /syslog /etc/rsyslog.conf /etc/rsyslog.d/50-default.conf
/etc/rsyslog.conf:*.*;auth,authpriv,kern,mail.none -/var/log/syslog
/etc/rsyslog.d/50-default.conf:*.*;auth,authpriv,kern,mail.none -/var/log/syslog
清楚地评论其中一个解决问题