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

StackOverflow https://stackoverflow.com/questions/1004764

  •  05-07-2019
  •  | 
  •  

Вопрос

*/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 не запускается дважды.

Другие советы

Wget в crontab часто ограничен 15 минутами. В нашем случае это был именно тот случай, и после этих 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 час. Или больше, если вам нужно!

Если это команда для приложения, которое вы установили, возможно, он уже добавил ту же запись в / 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)

Мой кронтаб

перегрузчик 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 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

Редактировать:

Я заметил, что один из процессов cron сообщает Jun06 в качестве даты начала (сегодня 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), он запускается с тем же 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

Я запустил старый процесс, и проблема решена.

Конечно, это не запись 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: пс | 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top