2009-06-17 49 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後,它完美運行。

我希望這可以幫助任何人。