Менеджер задач для cron'а на PHP

Часто на проекте требуется выполнять некие периодические  действия и  для этого мы используем замечательный планировщик cron. Эти действия являются (скорее всего)  частью работы проекта, но находясь в cron’e они  “оторваны”  от проекта. Я придерживаюсь мнения, что все, что относится к проекту,  должно находиться в оном месте.

Поэтому и был написан планировщик, который создавал бы единую точку входа задач, позволяя хранить все задачи в проекте, а не в crontab. У такого решения есть несколько преимуществ:

  1. За пределами проекта нет важных данных, которые можно потерять при переносе. Т.е. при переносе папки с проектом задачи переедут автоматически, удобно, не правда ли?
  2. Для изменения/добавления  задачи не нужен шелл на сервере
  3. Не засирается crontab - там будет только одна задача для проекта

Итак, приступим к установке: 

Создадим composer.json

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/azurre/scheduler"
    }
  ],
  "require": {
    "azurre/php-scheduler": "master"
  }
}

Устанавливаем: 

composer install

Создаем точку входа для планировщика, назовм её scheduler.php

$loader = require_once __DIR__ . '/vendor/autoload.php';

use Azurre\Component\Cron\Scheduler;

$php  = '/usr/bin/php';
$path = dirname(__FILE__) . '/';

$Scheduler = new Scheduler();
$Scheduler
    ->setJobPath($path)
    ->setLogsPath($path);

$Scheduler->addJob('*/10 * * * *', function ($logsPath, $jobPath) use ($php) {
    // run standalone php script
    $cmd = "{$php} {$jobPath}calculate.php >> {$logsPath}calculate.log 2>&1";
    $result = `$cmd`;
});


echo date('d-m-Y H:i:s') . ' Run scheduler...' . PHP_EOL;
$Scheduler->run();

 

Добавляем в cron...

$ crontab -e

...запуск нашей точки входа каждую минуту:

* * * * * /usr/bin/php /path/to/project/scheduler.php >> /path/to/project/scheduler.log 2>&1

 

Все. Осталось добавлять задачи через $Scheduler->addJob()

Проект на Gitubhttps://github.com/azurre/scheduler

В проекте вжнейшую роль играет парсер выражений кронаhttps://github.com/yalesov/php-cron-expr-parser


 

Теги: Cron, Linux, PHP

Комментарии (0)