Управление автоматическим запуском консольных команд

Выкладываем свои наработки

Управление автоматическим запуском консольных команд

Сообщение Yiivgeny » 2012.01.04, 04:46

PHPDocCrontab
Расширение для Yii Framework добавляющее возможность удобно управлять автоматическим запуском консольных команд используя синтаксис phpDocumentor и crontab.

Возможности и преимущества
  • Полностью идентичный синтаксис для Unix и Windows платформ (сходный со стандартным синтаксисом crontab)
  • Установка времени запуска каждого экшена команды в отдельности, используя всего одно задание в системном планировщике
  • Установка дополнительных параметров запуска (аргументы, stderr, stdout)
  • Возможность отмечать каждый экшен тегами, т.е. группировать экшены в наборы команд (например для запуска разных наборов на разных серверах)
  • Быстрое отключение\включение всех запланированных заданий
  • Хранение расписания заданий вместе с исходными кодами приложения

Как это использовать?
Во-первых, необходимо снабдить каждый экшен, который вы желаете запускать автоматически phpDoc-комментарием похожим на этот
Код: Выделить всё
class TestCommand extends CConsoleCommand{    
    
/**
     * Это действие будет запускаться каждый третий час на двенадцатой минуте
     * 
     * @cron 12  *\3  *  *  *
     */
    public function actionTest(){;}    
}

Во-вторых, вы должны скачать расширение отсюда https://github.com/Yiivgeny/Yii-PHPDocCrontab/downloads, распаковать его в папку расширений

Далее необходимо внести изменения в конфигурацию вашего приложения, добавив директиву
Код: Выделить всё
..., 
 
'commandMap' => array(
    'cron' => 'ext.PHPDocCrontab.PHPDocCrontab'
),
... 


И последним шагом, вам необходимо установить в планировщик заданий запуск этого скрипта каждую минуту, чтобы расширение могло запускать ваши команды. Например добавить вот такое задание в cron:
Код: Выделить всё
* * * * * /path/to/your/application/protected/yiic cron

Теперь вам достаточно добавлять\редактировать\убирать комменитарии из исходного кода, чтобы управлять соответствующими заданиями.

Требования
Необходим Yii Framework версии 1.1.6 или старше.

К пользователям
Прошу отписываться тех, кто использует много консольных команд запускаемых из планировщика или тех кто считает расширение привлекательным.

В планах добавить следующее, если кого-то заинтересует:
  • Полную документацию по уже реализованным возможностям
  • Улучшить работу с перенаправлением вывода (подстановки, использование алиасов Yii)
  • Использовать кеш для получения списка заданий

С нетерпением жду комментариев. Заранее спасибо
Последний раз редактировалось Yiivgeny 2012.05.30, 01:57, всего редактировалось 4 раз(а).
Yiivgeny
 
Сообщения: 70
Зарегистрирован: 2010.11.24, 10:39

Re: Управление автоматическим запуском консольных команд

Сообщение PixoiD » 2012.01.04, 10:45

Что то не работает
добавил:

Код: Выделить всё
/**
     * @cron * * * * *
     */
    
public function actionTest(){ 


Код: Выделить всё
'commandMap' => array(
        
'mapper' => 'ext.W3CronCommand.W3CronCommand'
    
),

    
'components'=>array(... 
Сила аргументов, аргументы силы!
PixoiD
 
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

Re: Управление автоматическим запуском консольных команд

Сообщение Yiivgeny » 2012.01.04, 12:02

А в системный плнанировщик добавили? В вашем случае (application/protected/yiic mapper)
Yii какой версии? ОС?
Yiivgeny
 
Сообщения: 70
Зарегистрирован: 2010.11.24, 10:39

Re: Управление автоматическим запуском консольных команд

Сообщение PixoiD » 2012.01.04, 12:20

все добавил Yii 1.1.9 система debian 6
Сила аргументов, аргументы силы!
PixoiD
 
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

Re: Управление автоматическим запуском консольных команд

Сообщение Yiivgeny » 2012.01.04, 12:37

На всякий случай посмотрите наличие задания с помощью команды
./yiic mapper view

И попробуйте создать папку logs в runtime, а в исходниках я поправлю вскоре, если дело только в этом
Yiivgeny
 
Сообщения: 70
Зарегистрирован: 2010.11.24, 10:39

Re: Управление автоматическим запуском консольных команд

Сообщение PixoiD » 2012.01.04, 12:55

./yiic mapper view

отдает:

Action tests.test on * * * *
(default)
Сила аргументов, аргументы силы!
PixoiD
 
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

Re: Управление автоматическим запуском консольных команд

Сообщение Yiivgeny » 2012.01.04, 12:59

Создание папки (и возможности записи в нее) решило проблему?
Если не хотите создавать директорию, можете воспользоваться тегом
@cron-stdout /dev/null
Yiivgeny
 
Сообщения: 70
Зарегистрирован: 2010.11.24, 10:39

Re: Управление автоматическим запуском консольных команд

Сообщение PixoiD » 2012.01.04, 13:07

Yiivgeny писал(а):Создание папки (и возможности записи в нее) решило проблему?
Если не хотите создавать директорию, можете воспользоваться тегом
@cron-stdout /dev/null


нет сам крон отрабатывает а вот мой тест нет...((( печалька , даже не могу понять по чему

подебажил и вот после это цикала выходит

Код: Выделить всё
foreach ($now AS $key => $piece){
                    
//Проверяем наличие текущей части даты в дате исполнения задания
                    
if (!in_array($piece$task['docs'][0][$key])) continue 2;
                } 
Сила аргументов, аргументы силы!
PixoiD
 
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

Re: Управление автоматическим запуском консольных команд

Сообщение Yiivgeny » 2012.01.04, 13:13

У вас точно верно задание вписано? Потому что на view не хватает куска даты (только 4 звездочки вместо 5)
Yiivgeny
 
Сообщения: 70
Зарегистрирован: 2010.11.24, 10:39

Re: Управление автоматическим запуском консольных команд

Сообщение PixoiD » 2012.01.04, 13:16

Yiivgeny писал(а):У вас точно верно задание вписано? Потому что на view не хватает куска даты (только 4 звездочки вместо 5)


я извиняюсь просто в консоли не влезло а так там 5*
Сила аргументов, аргументы силы!
PixoiD
 
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

След.

Вернуться в Авторский код и библиотеки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1