Вопрос по – Почему эта запись cron выполняется дважды?

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.

Возможный дубликатwhy my cron job executing multiple times? Ken Sharp

Ваш Ответ

9   ответов
0

# 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

Четко комментируя один из 2 решает проблему

39

в другом месте.

Do two users call it? Is it entered twice? Does it call itself? Does it set in motion conditions for repetition?

Если это сценарий оболочки, который вы выполняете, добавьте егоwhoami а такжеdate в файл журнала. Вы должны быть в состоянии найти причину.

UPDATE

Введите ps -A, убедитесь, что crond не запущен дважды.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded erotsppa
Error: User Rate Limit Exceeded
0

3

которое вы установили, возможно, он уже добавил ту же запись в/etc/crontab или же/etc/cron.d/<something>.

Error: User Rate Limit Exceeded/etc/cron.dError: User Rate Limit Exceeded
8

был именно тот случай, и после этих 15 минут задание заканчивается тайм-аутом, а затем снова запускается снова. Итак, решение этой проблемы состояло в том, чтобы настроить cronjob в crontab примерно так:

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

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

Но это не ответ, почему это происходит ...

Система - gentoo Крон - Викси-Крон

часть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 процесса июнь06 в качестве даты начала (сегодня 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-сервер, работающий на хост-машине.

Независимо от того, что я делаю (/etc/init.d/vixie-cron restart), он запускается с тем же PID

РЕШИТЬ:

Я нашел причину. Один V-сервер был запущен дважды, с другим контекстом. Возможное объяснение - кто-то изменил контекст во время работы машины, и в результате не все процессы были убиты, и что более того - они повлияли на новый экземпляр 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

У меня СРОК старый процесс, и проблема решена.

0

У меня та же проблема, но у меня есть только один cron: пс | 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
Error: User Rate Limit Exceeded
1

это не запись crontab, которая заставляет его запускаться дважды. Самый быстрый способ узнать, что происходит, - это добавить отладку в скрипт задания cron. Если вы ничего не делаете, то по умолчанию вывод cron будет отправлен по почте[email protected] (если вы не настроили это как другое), поэтому, предполагая, что у вас есть root-доступ, добавьте в скрипт некоторую отладочную информацию, такую как:

echo "Script starting"
date
whoami

и посмотрите на вывод. Это поможет вам понять, как это вызывать дважды.

Error: User Rate Limit Exceeded
1

в моем случае я дважды инициализировал службу cron по ошибке. После того, как я остановил Cron# /etc/init.d/crond stop и начал это снова# /etc/init.d/crond startСработало отлично.

Я надеюсь, что это может кому-нибудь помочь.

Похожие вопросы