Почему эта запись cron выполняется дважды?
-
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 решает проблему