代码之家  ›  专栏  ›  技术社区  ›  erotsppa

为什么这个cron条目执行两次?

  •  16
  • erotsppa  · 技术社区  · 16 年前
    */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命令。

    9 回复  |  直到 6 年前
        1
  •  39
  •   Stefan Mai    16 年前

    描述中没有给出两次执行的原因。看看别处。

    • 有两个用户叫它吗?
    • 输入两次了吗?
    • 它叫自己吗?
    • 它是否为重复设置运动条件?

    如果是您正在执行的shell脚本,请将其附加 whoami date 一个日志文件。你应该能找出原因。

    更新

    键入ps-a,确保crond不会运行两次。

        2
  •  8
  •   anoraq    9 年前

    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小时。如果你需要的话!

        3
  •  3
  •   sth    16 年前

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

        4
  •  3
  •   SachinJose    8 年前

    我确认了-我的亲信也跑了两次…

    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)
    

    我的克伦塔布

    grep-r/var/spool/-e重新加载

    /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
    

    但这不是为什么会发生的答案…

    系统-古巴 克罗恩-维克西克罗恩

    部分 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进程的一个报告6月6日为开始日期(今天是6月24日)

    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
    

    第二个进程报告正确(服务器运行时间约为40分钟-我最近重新启动了它) 一个重要信息是V-server在主机上运行。

    不管我做什么(/etc/init.d/vixie-cron restart),它都是以相同的pid开始的

    解决了的:

    我找到了原因。 一个v-server运行了两次,上下文不同。 可能的解释-有人在计算机运行时更改了上下文,结果并不是所有进程都被终止,更重要的是-它们确实影响了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
    

    我说的是老流程,问题解决了。

        5
  •  1
  •   Eddie    16 年前

    当然,不是crontab条目导致它运行两次。找出问题的最快方法是在cron作业脚本中添加一些调试。如果您什么都不做,那么默认情况下cron输出将被发送到 root@localhost (除非您已将其配置为不同),所以假设您具有根访问权限,请向脚本添加一些调试信息,例如:

    echo "Script starting"
    date
    whoami
    

    看看输出。这会让你开始弄清楚这是如何被两次调用的。

        6
  •  1
  •   Luis Parada    9 年前

    我曾经遇到过同样的问题,在我的例子中,我错误地初始化了两次cron服务。在我阻止克罗恩之后 # /etc/init.d/crond stop 又开始了 # /etc/init.d/crond start ,效果很好。

    我希望这对任何人都有帮助。

        7
  •  0
  •   David Schwartz    13 年前

    看起来有两个crond在运行,一个pid 12512,一个pid 12516。

        8
  •  0
  •   Saphiro    11 年前

    我使用OpenWRT。

    我也有同样的问题,但我只有一个克罗恩: 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
    

    日志读取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
    
        9
  •  0
  •   Alessandro Dentella    6 年前

    由于在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
    

    清楚地评论其中一个解决了问题