Моя cronjob повторяется каждые 15 минут, и я понятия не имею, почему.
Вот файл crontab с замененными реальными командами:
# m h dom mon dow command
# Comment
0 9 * * * command arg1
0 14 * * * command arg1
0 19 * * * command arg1
0 1 * * * command arg1
#0 19 * * * command arg1
#0 22 * * * command arg1
Я изменил crontab и перезапустил сервер. Все началось как положено. Но он повторял команду каждые 15 минут. Моя команда - это сценарий sh, который использует wget для запуска веб-службы.
У меня такое ощущение, что crontab повторяет неудачную команду через 15 минут (большую часть времени wget дает сбой, потому что веб-сервису требуется более 1 минуты для выполнения). Я прав? И как это исправить?
cron не пытается повторно выполнить задания. Он просто выполняет команды по расписанию. Не обязательно заботиться о том, добьются они успеха или нет. cron также не накладывает никаких таймаутов.
Вы можете проверить свой системный журнал и / var / log / cron (по крайней мере, там, где он находится в системах в стиле RedHat).
Кроме того, если пользователь, владеющий crontab, не получает сообщения электронной почты, касающиеся вывода команды wget, вставьте MAILTO=you@your.email.address, чтобы лучше понять, что происходит при выполнении команды.
Видеть:
man 5 crontab
... для получения дополнительных сведений о некоторых других параметрах, которые можно настроить для crontab пользователя.
Со страницы руководства WGET
При взаимодействии с сетью Wget может проверить тайм-аут и прервать операцию, если она длится слишком долго. Это предотвращает такие аномалии, как зависание чтения и бесконечные подключения. Единственный включенный по умолчанию тайм-аут - это 900-секундный тайм-аут чтения. Установка тайм-аута на 0 полностью отключает его. Если вы не знаете, что делаете, лучше не изменять настройки тайм-аута по умолчанию.
Я обнаружил, что по умолчанию wget повторяет запрос при сбое. Добавление "-t 1" или "--times = 1" решило проблему.
Я ленив, поэтому только два быстрых ответа.
Первый - заглянуть в / etc / cron *, чтобы узнать, есть ли какие-нибудь интересные вещи, которые могут ответить на ваш вопрос.
Второй - посмотреть на ps aux, чтобы увидеть, есть ли какие-то процессы, о которых вы не знаете, и, возможно, они запускают ваш скрипт каждые 15 минут.
Затем бесплатно третий, вы можете изменить свой скрипт, чтобы сообщить (логировать), от кого он запущен, возможно, добавив в начале что-то вроде ps aux | grep $ PPID> /tmp/your_script_parent_process.log.
Я прощал. Может быть и другой ответ, возможно, команда выполняется с помощью crontab другого пользователя.
Андреа