Выполнение php скриптов в cron
В интернете описывают много способов запуска php скриптов по расписанию, с помощью cron. Перепробовал пару десятков методов, описывающие вызов скриптов и через wget, fetch, указанием обработчика в задании сron, различных путей, относительных и прямых, но скрипт почему то не запускался.
Нашел метод, который подошел к моей системе:
- FreeBSD 8.1-RELEASE
- PHP Version 5.3.4
Во-первых, в исполняемый скрипт добавил строку, указывающую обработчик:
#!/usr/local/bin/php
А дальше — выставил скрипту права на исполнение:
chmod 777 upd-serv.php
, где upd-serv.php — имя моего скрипта.
Далее пошел редактировать задания крона, файл необходимый нам называется crontab, находится в папке /etc.
Добавил следующее задание:
*/1 * * * * root /mnt/WWW/cs.24srv.ru/data/upd-serv.php >> /mnt/WWW/cs.24srv.ru/upd-serv.txt
- >> /mnt/WWW/cs.24srv.ru/upd-serv.txt — данная конструкция сделана для вывода в файл результатов выполнения скрипта, в моем случае после удачного выполнения скрипт ничего в файл не пишет.
- */1 * * * * — данная конструкция означает, что скрипт выполняется на сервере с интервалом 1 раз в минуту. Кто то скажет, что сильно часто — ну мне необходимо производить мониторинг серверов в режиме практически реального времени.
- root — имя пользователя — под которым выполнять скрипт, хватило бы доже пользователя, которому принадлежал файл.
- /mnt/WWW/cs.24srv.ru/data/upd-serv.php — собственно прямой путь к скрипту, который должен выполняться.
Второй проверенный способ:
Система:
- FreeBSD 9.1-STABLE
- PHP Version 5.4.10
PHP файл оставляем в покое, идем разу редактировать задания cron’a:
5 1 * * * root /usr/local/bin/php -f /mnt/www/24srv.ru/data/crontab.php sitemap
В данном случае мы указываем полный путь к обработчику php с ключом -f, после указываем путь к файлу и параметр запуска файла (входящая переменная). Все.