Cronjob - как сделать это правильно?

Очень распространенная потребность приложения - запускать скрипт каждые X минут/часов. В принципе, в этом нет ничего сложного, просто немного PHP-кода и запись в crontab.

Хотя я написал довольно много таких cronjobs за последние годы, я все еще не видел никаких лучших практик, по крайней мере, не так много. Как и при любой "фоновой обработке", многие вещи могут пойти не так, особенно в производственных условиях.

Среди них:

  • ошибка во время выполнения cron и скрипт умер, обработав половину данных
  • cronjob был случайно запущен дважды другим процессом/по ошибке пользователя/что угодно
  • cronjob занял гораздо больше времени, чем ожидалось, и скрипт вызывается снова, хотя он не закончил обработку данных
  • и т.д.

Каковы некоторые лучшие практики для написания надежных, устойчивых скриптов cronjob? Написание файла блокировки, утверждающего, что запускается только один экземпляр, обширное логирование и мониторинг, чтобы предотвратить отправку десяти тысяч дублирующих писем? Какие у вас есть идеи?

7
задан Mob 21 February 2012 в 20:55
поделиться