Cron – мощнейший инструмент для автоматизации рутинных задач в серверных приложениях. С его помощью можно автоматически запускать программы и скрипты по расписанию, назначая регулярные задания на конкретное время. Все задания Cron хранятся в файле crontab, который создается для каждого пользователя отдельно (процессы запускаются от имени соответствующего пользователя). Редактировать задания можно в панели управления или посредством специализированной программы. Рассмотрим некоторые особенности работы с Cron, вызывающие у пользователей сложности.
Отправка отчета на e-mail
Cron отправляет на электронную почту администратора всю выводимую на экран текстовую информацию (если запускаемые программы или скрипты вообще осуществляют какой-то вывод). В качестве электронного адреса администратора Cron использует e-mail, указанный пользователем в панели управления. Данный адрес можно сменить, прописав в самом начале файла crontab строку “MAILTO=your@e-mail.ru”. Весь экранный вывод Cron перенаправит на электронный адрес, прописанный в этой строчке.
Вывод определенных команд можно полностью подавить, переадресовав его в /dev/null. Достаточно откорректировать строку, инициирующую выполнение данной команды. Например, так:
/usr/bin/php cronjobs.php > /dev/null
Если скрипт отправляет какую-то информацию в поток ошибок, его тоже возможно подавить, составив инструкцию для Cron следующим образом:
/usr/bin/php cronjobs.php 2 > /dev/null
Чтобы полностью подавить вывод всей информацию на stdout и stderr, инструкцию в файле заданий Cron следует привести к такому виду:
/usr/bin/php cronjobs.php 1> /dev/null 2>&1
Указание каталога, в котором выполняется скрипт
Даже относительно опытные администраторы и программисты нередко допускают одну характерную ошибку, связанную с каталогом выполнения команды. В Cron механизм исполнения скриптов отличается от того, который использует веб-сервер. Когда скрипт вызывается через веб-приложение, интерпретатор PHP исполняет его в той же папке, где он расположен. А Cron по умолчанию запускает скрипты в домашней директории пользователя.
Таким образом, запуская скрипт через Cron, можно обнаружить, что ему не удается открыть необходимые файлы, тогда как при обычном вызове через браузер или wget он работает без ошибок. Исправить это можно, принудительно заставив Cron перейти в целевую папку. К примеру, строка
/usr/bin/php sitename.ru/www/path/to/script.php
должна быть исправлена на
cd sitename.ru/www/path/to && /usr/bin/php script.php
После исправления Cron будет исполнять команду в целевом каталоге, и подключаемые файлы будут доступны.
Запуск скриптов через wget
Некоторые программисты при настройке Cron вызывают скрипты через wget, прописывая команды вроде:
wget http://sitename.ru/path/to/script.php
Проблема несоответствия каталога запуска решается автоматически, но возникает другая проблема. Если Cron-скрипт требует для выполнения большого количества времени, то существует риск, что он не успеет выполнить все действия из-за ограничений PHP на время работы скрипта. Также нештатные ситуации могут возникнуть из-за лимитов на количество процессов PHP.