Сегодня я расскажу как использовать cron в вашем Yii2 проекте
В первую очередь, что такое CRON и какой формат он имеет.
cron — классический демон (компьютерная программа в системах класса UNIX), использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные каталоги.
Название cron образовано от греческого слова χρόνος (хрόнос) — время (по-английски — cronos). Разработчик cron Ken Thompson
В операционных системах Linux cron конфигурацию можно посмотреть командой:
$ crontab -e <user>
Формат файла cron
m h dom mon dow user command 17 * * * * root php script.php
Что он означает? Друг за другом через пробел указываются данные о времени (минута, час, день, месяц, день недели), пользователе (под которым будет выполнен скрипт) и путь к скрипту для запуска.
Звездочка (*) означает “любое” значение. Крон запускается раз в минуту. Поэтому, если мы укажем
m h dom mon dow user command * * * * * root php script.php
, то он будет выполняться каждую минуту.
Если нам необходимо запускать скрипт в 00 часов 00 минут каждую среду, то запись будет в виде:
m h dom mon dow user command 0 0 * * 3 root php script.php
Как переодически запускать в кроне команды Yii2?
Более подробно о том, как создавать команды в Yii2, можно прочитать здесь.
Допустим, мы создали следующую команду HelloController:
namespace app\commands; use yii\console\Controller; class HelloController extends Controller { public $message; public function options($actionID) { return ['message']; } public function optionAliases() { return ['m' => 'message']; } public function actionIndex() { echo $this->message . "\n"; } }
Чтобы запустить ее из консоли, нам достаточно выполнить
php yii hello -m=hello
Для того, чтобы начать использовать cron вам достаточно указать эту строку в crontab -e
m h dom mon dow user command 0 0 * * 3 root php /var/www/site.ru/yii hello -m=hello
Обязательно необходимо указывать полный путь к файлу, т.к. крон всегда будет искать начиная с корня файловой системы.