Назад | Перейти на главную страницу

Crontab повторяется каждые 15 минут

Моя 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 другого пользователя.

Андреа