CronTabManager - или как управлять crontab из админки
Для начала сразу оговорюсь, это не CronTabManager из репозитория modx.com! По этому пытаться сравнивать его смысла нету))
Компонент представляет из себя полноценный набор классов для управления crontab заданиями, по мимо того что он умеет записывать крон задания напрямую в crontab (можно проверить это на modhost.pro) у него еще есть ряд на мой взгляд отличных преимуществ:
В заметке опишу лишь базовые возможности компонента…
В настройка компонента есть параметр: crontabmanager_handler_class он принимает два класса:
CrontabManagerHandler — записывает задания в crontab
CrontabManagerHandlerFile — записывать задания в файл (которые нужно будет переносить в ручную)
класс CrontabManagerHandler может не работать на большинстве хостингов так как возможно много ограничений препятствовать этому.
Для полноценного теста компонент можно попробовать на modhost.pro, так как там разрешена запись задания напрямую в crontab из под веб пользователя.
Все контроллеры крон заданий хранятся в директории:
Это задание запускает контроллер demo.php, путь к контроллеру
Внимание!!! класс контроллера должен напрямую совпадать с именем файла контроллера
То есть ваше имя класса контроллере всегда должено начинаться с
Если вы пользовались когда то RESTfuil то для вам не составит труда разобрать как работаю контроллеры. Создаются и запускаются контроллеры по тому же принципу.
Если чуть подробней: когда вы включаете контроллер то автоматически создается карта контроллеров c ссылками на их запуск:
Основная проблема в то что на большинстве хостинго права на запись в crontab менеджер из под веб пользователя ограничены. У вас попросту не добавиться задание в crontab.
Для таких хостигов я предусмотрел возможно смены контролера записи заданий. То есть задание будет писать не в crontab а в обычный файл из которого можно скопировать список заданий и перенести в ручную их в crontab
Компонент очень мощный, и решает комплекс задач связанных с фоновыми заданиями.
Так как скоро новый город))) Решил приурочить публикацию компонента к этому празднику и сделать его бесплатным для всех)))
Скоро компонент появиться на modstore.pro
Сейчас компонент скачать можно здесь
Если кому станет полезным компонент, то можно за донатить
Компонент представляет из себя полноценный набор классов для управления crontab заданиями, по мимо того что он умеет записывать крон задания напрямую в crontab (можно проверить это на modhost.pro) у него еще есть ряд на мой взгляд отличных преимуществ:
- Ведет логи запуска заданий
- Отслеживает и уведомляет администратора сайта если задание завершилось с ошибкой после n количества попыток запуска
- Возможность прочесть лог с ошибкой
- Имеет уже встроенный набор классов для создания новых заданий (новое задание создается как контроллер для RESTfuil)
- Позволяет запускать задание из админки точно так же как бы мы запускали его из под ssh пользователя
- Блокировка заданий на n количества времени из письма
В заметке опишу лишь базовые возможности компонента…
В настройка компонента есть параметр: crontabmanager_handler_class он принимает два класса:
CrontabManagerHandler — записывает задания в crontab
CrontabManagerHandlerFile — записывать задания в файл (которые нужно будет переносить в ручную)
класс CrontabManagerHandler может не работать на большинстве хостингов так как возможно много ограничений препятствовать этому.
Для полноценного теста компонент можно попробовать на modhost.pro, так как там разрешена запись задания напрямую в crontab из под веб пользователя.
Задания и контроллеры
Все контроллеры крон заданий хранятся в директории:
core/scheduler/Controllers/
Демонстрация как работает задания вы можете увидеть перейдя в админку. Во время установки у вас уже добавиться новое задание с название demo.phpЭто задание запускает контроллер demo.php, путь к контроллеру
core/scheduler/Controllers/demo.php
Внимание!!! класс контроллера должен напрямую совпадать с именем файла контроллера
То есть ваше имя класса контроллере всегда должено начинаться с
CrontabController[ТУТ ПИШЕМ путь до файла относительно папки core/scheduler/Controllers/]
Что такое контроллеры?
Если вы пользовались когда то RESTfuil то для вам не составит труда разобрать как работаю контроллеры. Создаются и запускаются контроллеры по тому же принципу.
Если чуть подробней: когда вы включаете контроллер то автоматически создается карта контроллеров c ссылками на их запуск:
Почему нужно устанавливать компонент на modhost.pro?
Основная проблема в то что на большинстве хостинго права на запись в crontab менеджер из под веб пользователя ограничены. У вас попросту не добавиться задание в crontab.
Для таких хостигов я предусмотрел возможно смены контролера записи заданий. То есть задание будет писать не в crontab а в обычный файл из которого можно скопировать список заданий и перенести в ручную их в crontab
Компонент очень мощный, и решает комплекс задач связанных с фоновыми заданиями.
Так как скоро новый город))) Решил приурочить публикацию компонента к этому празднику и сделать его бесплатным для всех)))
Скоро компонент появиться на modstore.pro
Сейчас компонент скачать можно здесь
Если кому станет полезным компонент, то можно за донатить
Поблагодарить автора
Отправить деньги
Комментарии: 18
Выглядит просто потрясающе! За такое не жалко и заплатить, честно говоря. Зря бесплатным делаешь.
Я и не подозревал что php умеет писать в crontab
Я и не подозревал что php умеет писать в crontab
Я и не подозревал что php умеет писать в crontabВ это вся и загвоздка.
Очень много серверов настроены именно так что у веб-пользователя нету прав писать задания в crontab.
К пример сервера на ispmanager вообще не дают прав чтобы редактировать crontab даже под ssh
Ну тем не менее — новая для меня информация. Уже полезно, уже спасибо!
@Андрей Степаненко,
Или имелось в виду, что редактировать автоматизированно (не руками в интерфейсе)?
Я просто засомневался, вдруг выпилили чего в новых версиях. На одном старом проекте обновляться собрались…
К пример сервера на ispmanager вообще не дают прав чтобы редактировать crontab даже под sshПривет, сорри за некропост, но в ISPmanager Планировщик всегда же был: yadi.sk/i/0aSW8LA6B9kJVw
Или имелось в виду, что редактировать автоматизированно (не руками в интерфейсе)?
Я просто засомневался, вдруг выпилили чего в новых версиях. На одном старом проекте обновляться собрались…
Обычно работают так — настраивают крон раз в минуту, ставят дополнения типа Scheduler и создают задания в админке. Чем этот вариант лучше?
Ну тут все просто, в отличии от Scheduler, в компоненте каждое задание это отдельно задание прописанное в кроне. а в Scheduler все вешается на одно задание.
А так же есть вот эти штуки: Есть уведомления о том что задание завершилось с ошибкой, ведутся логи запуска и завершения задания, и пишет в crontab на прямую.
В общем не стоит сравнивать компонент с какими то существующими. Аналогов для modx явно не найти.
В компоненте можно любое количество контроллеров создать и запускаться будут по отдельности.
В общем надо ставить пользоваться, я вот так простыми словами не опишу даже.
Могу сказать только:
у меня есть проекты где по 50 крон заданий, каждое задание может выполнять хоть час хоть одну минуту, вот и представь сколько будут выполнять задания через Scheduler
А так же есть вот эти штуки: Есть уведомления о том что задание завершилось с ошибкой, ведутся логи запуска и завершения задания, и пишет в crontab на прямую.
В общем не стоит сравнивать компонент с какими то существующими. Аналогов для modx явно не найти.
В компоненте можно любое количество контроллеров создать и запускаться будут по отдельности.
В общем надо ставить пользоваться, я вот так простыми словами не опишу даже.
Могу сказать только:
у меня есть проекты где по 50 крон заданий, каждое задание может выполнять хоть час хоть одну минуту, вот и представь сколько будут выполнять задания через Scheduler
Понял. Тут тебе виднее. Мне хватает одного крона )
Сам лично давно смотрю в сторону Horizon. Адаптировать к MODX с первого взгляда несложно. Сам бы это сделал, если бы был на пенсии )
Сам лично давно смотрю в сторону Horizon. Адаптировать к MODX с первого взгляда несложно. Сам бы это сделал, если бы был на пенсии )
Для нескольких крон заданий компонент наверное смысла ставить нету. Хотя опять же если не умеешь пользоваться crontab через ssh то этот компонент поможет составить список заданий. А потом просто скопировать их в crontab.
Вообще очень спасают уведомления на емайл. Когда отваливается какой то скрипт или сервис, тебя не заваливает сообщениями об ошибке. Так как есть лимит не удачных попыток. К примеру если 10 раз задание завершилось с ошибкой то только после 10 раза уйдёт уведомление и цикл будет повторятся пока администратор не предпримет какое то действие, или работа скрипа не восстановится.
Вообще очень спасают уведомления на емайл. Когда отваливается какой то скрипт или сервис, тебя не заваливает сообщениями об ошибке. Так как есть лимит не удачных попыток. К примеру если 10 раз задание завершилось с ошибкой то только после 10 раза уйдёт уведомление и цикл будет повторятся пока администратор не предпримет какое то действие, или работа скрипа не восстановится.
В общем это не только крон задания, а так же система уведомлений и готовый API с modx внутри.
Пример кода для создания нового задания
В modCrontabController еще куча всяких фич. Надо все описывать конечно)))
Пример кода для создания нового задания
<?php
/**
* Демонстрация контроллера
*/
class CrontabControllerDemo extends modCrontabController
{
public function run()
{
$this->modx->log(modX::LOG_LEVEL_ERROR, "Задание завершено", '', __METHOD__, __FILE__, __LINE__);
}
}
все что нужно чтобы в run выполнить свой код.В modCrontabController еще куча всяких фич. Надо все описывать конечно)))
Здравствуйте. Компонент плохо удаляется, у меня после удаления в админке осталась вкладка crontabmanager, внутри которой сообщение «Could not find action file at: controllers/default/index.php». Я деинсталлировал и удалил пакет, а это осталось.
Дак это может ошибка в другом компоненте?
Вкладка называется crontabmanager, я думаю, она должна была удалиться вместе с компонентом. Но не могу утверждать, что ошибка именно в crontabmanager. Можете подсказать, где можно почистить вкладку «Пакеты», чтобы вручную удалить эту строку?
Где ссылка на системные настройки, там есть ссылка меню, компоненты и правой кнопкой мыши
Спасибо!
Почему может появляться ошибка «Не удалось добавить задание контроллер demo.php в crontab»? При включении задачи
Покажи скрин
Вообще надо создать файл core/scheduler/Controllers/demo.php
Класс должен быть одноимённый
Класс должен быть одноимённый
CrontabControllerDemo extends modCrontabController
Установил плагин — у него потрясающий функционал. С какими проблемами столкнулся:
1) мало документации.
2) Так и не понял разницу CrontabManagerHandlerFile и CrontabManagerHandler.
3) При активации и деактивации появляются ошибки и она становится невозможной (выполнил опытным путем удаляя задание через ispPanel)
4) когда все же все заработало увидел ряд ошибок:
1) мало документации.
2) Так и не понял разницу CrontabManagerHandlerFile и CrontabManagerHandler.
3) При активации и деактивации появляются ошибки и она становится невозможной (выполнил опытным путем удаляя задание через ispPanel)
4) когда все же все заработало увидел ряд ошибок:
PHP Fatal error: Can't use method return value in write context in /var/www/site.ru/core/components/crontabmanager/model/crontabmanager/crontabmanagertasklog.class.php on line 10
Данные ошибки связаны с этим файлом и crontabmanagertask.class.php на строках 99,222,231 (везде где написано if (EMPTY($this->get('tratata')))). Почему-то не нравится ему empty. При этом у меня php74 а запускатеся под 7.2
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.