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

задание cron выполняется постоянно, почему?

Почему это задание cron выполняется многократно с течением времени и что я могу сделать, чтобы его остановить?

У меня есть задание cron, которое должно выполняться каждое утро в 4 часа. Он попадает в php-скрипт, который выполняет некоторый ежедневный анализ данных и в нормальных условиях запускается один раз (на выполнение требуется около 2-3 минут) и завершает работу. Он работал, но в последнее время он работает как раз в момент сбоя сервера. Я исследовал и нашел следующее. Запись crontab выглядит так:

* 4 * * * /usr/bin/wget -q -O /dev/null 'http://123.456.78.90/index/thing?param=1'

В моем файле журнала я вижу:

123.456.78.90 - - [28/Nov/2012:04:00:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:04:01:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:04:02:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
// and then later it ends with (note that it isn't trying every minute now)
123.456.78.90 - - [28/Nov/2012:05:28:09 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:05:29:36 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:05:29:00 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:06:06:51 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:06:06:53 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"

Почему он показывает такие повторяющиеся прогоны? Он чего-то не достигает, поэтому продолжает попытки? Любая помощь приветствуется, так как эта штука с несколькими запусками для меня нова.

Похоже, вы запускаете его каждую минуту четвертого часа дня. Итак, запускается 60 копий wget.

* 4 * * * .....

Затем они занимают столько времени, сколько потребуется. С 60 запущенными копиями это, вероятно, довольно много времени, что объясняет, почему некоторые запросы заканчиваются на несколько часов позже.

Если вы действительно хотите, чтобы он запускался только один раз ровно в 4 часа ночи, используйте:

0 4 * * * .....

Если вы хотите, чтобы этот wget запускался каждый день в 4 часа ночи, я бы предложил изменить ваше задание cron, чтобы оно выглядело следующим образом:

0 4 * * * /usr/bin/wget -q -O /dev/null 'http://123.456.78.90/index/thing?param=1'

http://www.adminschoice.com/crontab-quick-reference

Я предлагаю сначала исправить это, а затем сообщить, если вы все еще видите проблему. Спасибо.

http://www.gnu.org/software/wget/manual/wget.html

Wget был разработан для обеспечения устойчивости к медленным или нестабильным сетевым соединениям; если загрузка не удалась из-за проблем с сетью, она будет повторять попытки до тех пор, пока не будет получен весь файл. Если сервер поддерживает повторную загрузку, он проинструктирует сервер продолжить загрузку с того места, где она была остановлена.

Я подозреваю, что тайм-аут (по умолчанию 900 секунд) и повторная попытка.