Почему это задание 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 секунд) и повторная попытка.