2009-06-17 58 views
12

*/5 * * * *我的命令为什么这个cron条目执行两次?

此入口有效,但每5分钟它会执行两次,为什么?

在/ var /日志/ cron的它表明:
06月16 22时20分01秒的试验的crond [12512]:(根)CMD(我的命令)
06月16 22时20分01秒的试验的crond [12516] :(根)CMD(我的命令)

所以它不是两个人。
它只用crontab输入一次-e -u root

该命令是一个php命令。

+0

[为什么我的cron作业执行多次?]的可能的复制(https://stackoverflow.com/questions/24012666/why-my-cron-job-executing-multiple-times) – 2017-12-02 18:37:01

回答

32

描述中没有任何内容给出它被执行两次的理由。在别处看看。

  • 两个用户都叫它吗?
  • 是否输入两次?
  • 它是否自称?
  • 它是否设置在重复的运动条件?

如果它是您正在执行的shell脚本,请将whoamidate附加到日志文件中。你应该能够挖掘原因。

UPDATE

键入ps -A,确保crond没有运行两次。

+0

请查看更新后的问题 – erotsppa 2009-06-17 02:23:18

+1

你没有回答:它是否自称?它是否在动作条件下重复? – 2009-06-17 02:26:40

+0

查看更新回答:) – 2009-06-17 02:26:42

0

肯定不是导致它运行两次的crontab条目。找出发生的最快方法是在cron作业脚本中添加一些调试。如果你什么都不做,那么在默认情况下cron的输出将被邮寄给[email protected](除非你已经配置这是不同的),所以假设你有root权限,添加一些调试信息的脚本,如:

echo "Script starting" 
date 
whoami 

并查看输出。这会让你开始了解如何调用两次。

3

如果它是针对您安装的应用程序的命令,可能它已将相同的条目添加到/etc/crontab/etc/cron.d/<something>

0

它看起来像你有两个crond的的运行,一个具有PID 12512和一个与PID 12516.

3

我确认 - 我的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) 

我的crontab

的grep -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 

但是这不是问题的答案,为什么这是发生...

系统 - 巴布亚 克龙 - 了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 

编辑:

我也注意到,该cron进程报告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分钟 - 我没有recenty重新启动它) 一个重要信息 - 它是在主机上运行的V-server。

无论我做什么(/etc/init.d/vixie-cron重新启动)它开始的具有相同PID

解决:

我找到了原因。 一个V服务器运行两次,具有不同的上下文。 可能的解释 - 有人已经改变,而机器运行的背景下,作为一个结果,而不是所有过程被打死,什么; S - 他们没有影响虚拟服务器(上下文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 

我TERM旧的过程,问题解决了。

0

我使用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 
4

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小时。或更多,如果你需要!

0

我曾经有同样的问题,在我的情况是我错误地初始化了两次cron服务。在我停止cron # /etc/init.d/crond stop并且再次启动它# /etc/init.d/crond start后,它完美运行。

我希望这可以帮助任何人。