Итак, задача:
Запустить PHP скрипт по расписанию с передаваемыми в него параметрами.
Решение:
Добавить новую запись в кронтаб из под текущего пользователя не сложно:
crontab -e
При возникновении желания что-нить отправить по мылу у крона – посылаем все на рута, для этого в самом верху пользовательского кронтаба пишем:
MAILTO=root
Для того, чтобы наш кронтаб при запуске нашего PHP скрипта, знал как его выполнить, мы пропишем в PHP скрипте спец. строчку, которая будет указывать на то, что этот скрипт должен выполняться с помощью PHP, а сам PHP скрипт переименуем так, чтобы не было расширения (на всяк случай, или для эксперимента), например: myscript вместо myscript.php. Для этого в нашем PHP скрипте, в самом верху пишем:
#!/usr/bin/env php <?php ....
Как мы видим, эта строка указывает на то, что все что следует далее надо выполнять с помощью интерпретатора PHP. Если вы внимательны, то заметили, что интерпретатор php указан без абсолютного пути, в таком случае нам необходимо в кронтаб текущего пользователя (от имени которого будет выполняться эта задача, скрипт) дописать вверху еще одну строчку, чтобы крон знал пути, откуда можно запустить интепретатор:
PATH=/usr/local/bin
В этой директории находится PHP интерпретатор (по крайней мере так у меня на FreeBSD). Чтобы узнать где у вас находится PHP, вБейте:
whereis php
и первой же строкой вы увидите путь к php.
Если вам необходимо запустить скрипт из-под крон, который будет использовать другие пути окружения, то можно одим махом все их включить в кронтаб таким же образом, но для того, чтобы узнать, какие же пути окружения у текущего пользователя, надо вБить:
echo $PATH
Вы должны увидеть что-то наподобие:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/data/bin
Вот всю это строчку в таком же виде вы и можете вставить в первых строках кронтаба текущего пользователя:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/data/bin
Помните:
Если PHP скрипт выполняется как консольная программа, то у вас всегда есть массив с параметрами, передаваемыми в ваш скрипт – $argv, в первом (нулевом) ключе которого всегда будет путь к исполняемому скрипту, то есть к самому себе. А также есть массив $argc – количество переданных параметров в ваш скрипт, будет всегда равно или больше 1.
Чтобы передать параметр к исполняемому скрипту надо просто добавить его через пробел далее после самого скрипта, например:
/long_path/myscript param1 param2 "param3" 4
Количество передаваемых параметров уточняйте в мануале по PHP. В таком случае, достучаться к параметрам можно с помощью массива $argv:
- (str)param1 = $argv[1]
- (str)param2 = $argv[2]
- (str)"param3" = $argv[3]
- (int)4 = $argv[4]
Итак, добавим новую запись в крон, выполнение нашего PHP скрипта каждые 10 минут:
crontab -e PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin MAILTO=root */10 * * * * /long_path/myscript "param1" param2 33
Итого:
В наш скрипт попадут три параметра: $argv[1] – $argv[3]. Наш скрипт будет выполняться каждые 10 минут. О том. как запускать скрипт в другое время (по иному расписанию):
man crontab
Всем успехов!