Выполнение PHP скрипта из-под cron (crontab) с параметрами

20/04/2012
от
Поделиться

Итак, задача:

Запустить 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

Всем успехов!

Поделиться

Ответить

Вы должны войти в систему, чтобы оставить комментарий.