- Совместимость с XenForo
- 2.2
- 2.3
- Видимый копирайт
- Нет
Это дополнение XenForo 2.2 реализует расширенный запуск задания с запуском CLI для использования с Unix cron в качестве замены встроенной
команды, представленной в XF 2.2
Команда вызывается
и выполняет то же самое, что
и делает, но с большим количеством опций и функций.
Характеристики
Основные возможности этого дополнения:
Требования
Для этого дополнения требуется PHP 7.0 или выше и он был протестирован на XenForo 2.2.0
Установка
Установите в соответствии с обычной установкой дополнения.
После установки перейдите на страницу параметров системы и производительности, чтобы изменить параметр запуска запуска задания на "Серверный триггер"
Во-первых, вы должны проверить, что ваш job runner работает - выполните следующую команду из вашего CLI:
Например, если ваш корневой каталог форума
, то команда job runner будет:
Выполнение этой команды выполнит все невыполненные задания, а затем завершится сообщением о том, есть ли еще задания, ожидающие выполнения, или нет. При выполнении этой команды из cron рекомендуется использовать флаг
(или
) для подавления вывода.
Как только вы убедитесь, что программа запуска заданий работает правильно, вам нужно будет создать свою собственную задачу cron, чтобы запускать ее по выбранному вами расписанию.
ПРИМЕЧАНИЕ: если у вас уже настроена задача cron для запуска
, просто отключите ее и замените идентичной задачей, которая выполняется
вместо нее.
Подход № 1 с использованием crontab:
Настоятельно рекомендуется запускать задачу cron от имени пользователя веб-сервера, чтобы предотвратить возможные проблемы с разрешениями.
Например, в Ubuntu с пользователем веб-сервера www-data установите задачу cron, выполнив следующую команду:
Отредактируйте файл crontab и добавьте:
Сохраните crontab.
Подход № 2 с использованием cron.d:
Вместо использования crontab некоторые дистрибутивы Linux создают хорошо известный каталог, который автоматически проверяется на выполнение задач cron. В случае Ubuntu вы можете создавать файлы, в
которых вы указываете расписание, пользователя для выполнения команды и саму команду.
Создайте файл
со следующим содержимым:
... где
изменено на имя пользователя, от имени которого работает ваш веб-сервер, и измените путь к корню вашего форума.
Опять же, используя наш предыдущий пример, где пользователь веб-сервера
, а корень нашего форума
Я бы выполнил следующую команду для создания файла cron:
Оба варианта (crontab и cron.d) будут запускать job runner каждую минуту, проверяя наличие невыполненных заданий для запуска.
По умолчанию программа выполнения заданий будет выполняться максимум 30 секунд, выполняя все невыполненные задания, пока в очереди не останется больше выполняемых заданий.
Обновление с версии addon v1.x после обновления XenForo до версии v2.2
версия v2.0 этого дополнения изменяет имя команды и максимально допустимое время выполнения. Обратите внимание также, что
опция в версии v1.x была переименована в
в соответствии с core job runner, представленным в XF версии v2.2.
Для обновления:
Конфигурация
Вы можете настроить максимальное время выполнения задания Runner, указав
опцию в командной строке.
Например, чтобы разрешить выполнение задания runner в течение максимум 45 секунд:
Это дополнение использует файлы блокировки, чтобы предотвратить одновременное выполнение нескольких команд запуска заданий, что также позволяет нам запускать команду в течение более длительных периодов времени на загруженных сайтах.
Максимально допустимое время выполнения составляет 10 минут (600 секунд). Команда будет выполняться до тех пор, пока не найдет больше невыполненных заданий, а затем остановится, поэтому время выполнения обычно составляет всего несколько секунд.
Для дальнейшей настройки выполнения вашего задания вы также можете настроить максимальное время, разрешенное для выполнения каждого задания.
Это настраивается с помощью XenForo config.php Вариант:
Этот
параметр настраивает количество времени в секундах, в течение которого обрабатываемым заданиям будет разрешено выполняться, прежде чем они будут приостановлены для дальнейшей обработки при другом обходе, если это возможно. Настройка по умолчанию оптимизирована для запуска запуска заданий в браузере, поэтому, чтобы задания выполнялись дольше в среде CLI, вы можете настроить это значение на более высокое.
В целом рекомендуется, чтобы этот параметр сохранял относительно небольшое значение, чтобы избежать ситуации, когда одно очень длинное задание может помешать своевременному выполнению других заданий. Может потребоваться некоторое экспериментирование, чтобы найти оптимальное значение для загрузки вашего сервера и размера форума. Если вы сомневаетесь, оставьте значение по умолчанию равным 8 секундам.
Использование
Команда должна выполняться автоматически с использованием задачи cron в соответствии с приведенными выше инструкциями.
Показать задания
Команда выводит список всех ожидающих выполнения заданий, чтобы вы могли видеть, насколько заполнена очередь заданий.
По умолчанию будут показаны только следующие запланированные 100 заданий, вы можете использовать эту
опцию для отображения полного списка всех ожидающих заданий.
Всегда должно отображаться как минимум два задания: основное задание Cron и задание проверки обновления.
Задания для отладки
Существуют обширные средства отладки, помогающие выявлять проблемы с заданиями и задачами Cron.
Для запуска в режиме отладки сначала отключите cron Unix, который автоматически запускает задания (не забудьте снова включить его, как только вы закончите отладку!), А затем используйте параметры детализации (Verbose:
, Very verbose:
или Debug:
) для
команды, чтобы указать уровень вывода для отображенияна консоли.
Вывод выводится на консоль и имеет формат, аналогичный формату, используемому библиотекой Monolog (хотя мы не используем Monolog для генерации вывода).
Например, подробный вариант
Очень подробный вариант
добавляет контекст, обычно о
И, наконец, опция отладки
добавляет дополнительную информацию о задании:
Отладка пользовательских заданий
Вы можете добавить дополнительную отладку к своим пользовательским заданиям.
Добавьте следующую функцию в свой класс заданий для вызова
функции нашего класса Logger:
Затем вы можете вызвать
функцию в своем коде задания для отправки информации на консоль, когда выполнение задания выполняется в подробном режиме.
Например, смотрите тестовое задание, включенное в это дополнение
Приведенный выше код сгенерирует следующий вывод, когда программа выполнения задания находится в режиме отладки:
При запуске в тихом режиме вывод не будет отображаться - и, что более важно, если этот аддон отключен, код ведения журнала не нужно будет удалять. Важной частью является
строка, которая будет прервана, если наш регистратор недоступен.
Отладка пользовательских задач Cron
Используя аналогичный механизм, мы также можем добавлять отладочный код в наши пользовательские задачи Cron:
Добавьте немного другую функцию в свои задачи Cron для вызова
функции нашего класса Logger:
Затем просто вызовите что-то вроде:
в вашем коде для вывода информации на консоль, когда выполнение задания выполняется в подробном режиме.
Черта регистратора
Существует также черта, которую вы можете включить в свои классы:
которая реализует некоторые базовые функции ведения журнала, которые вы можете вызывать из своего кода:
в обычном или тихом режиме ни один из выходных данных не отображается, если он не использует logNormal или logQuiet (которые следует использовать только для ошибок).
Отладка задач Cron
Начиная с версии 2.0 beta 3, появились две новые команды для работы с задачами XF cron:
Показать Crons
В
команде будут перечислены все ваши активные задачи XF cron
Вы можете указать три параметра командной строки:
Запустите Cron
Команда выполнит задачу XF cron - просто укажите идентификатор cron в качестве аргумента.
Например:
будет запущена задача cron "Отправить сводку активности по электронной почте".
По умолчанию отключенные задачи cron не могут быть запущены, поэтому вы можете переопределить это, указав параметр
или
в командной строке.
Здесь работают те же флаги детализации - поэтому укажите
,
или
для генерации желаемого уровня вывода.
xf:run-jobs
команды, представленной в XF 2.2
Команда вызывается
hg:run-jobs
и выполняет то же самое, что
xf:run-jobs
и делает, но с большим количеством опций и функций.
Характеристики
Основные возможности этого дополнения:
- позволяет командам обрабатывать задания / cron до 10 минут одновременно, даже если они запускаются каждую минуту из задачи cron (использует файл блокировки для предотвращения параллельного выполнения нескольких заданий) - идеально подходит для повышения производительности заданий на сайтах с высоким трафиком
- для тестирования и выявления проблем с заданиями и задачами cron доступны обширные выходные данные отладки
- замена для
xf:run-jobs
- команда для перечисления всех невыполненных заданий
hg:show-jobs
- команда для перечисления всех задач XF Cron
hg:show-crons
- команда для выполнения задачи XF Cron
hg:run-cron
Требования
Для этого дополнения требуется PHP 7.0 или выше и он был протестирован на XenForo 2.2.0
Установка
Установите в соответствии с обычной установкой дополнения.
После установки перейдите на страницу параметров системы и производительности, чтобы изменить параметр запуска запуска задания на "Серверный триггер"
Во-первых, вы должны проверить, что ваш job runner работает - выполните следующую команду из вашего CLI:
HTML:
$ php <path to your forum root>/cmd.php hg:run-jobs
Например, если ваш корневой каталог форума
/srv/www/xenforo/community
, то команда job runner будет:
HTML:
$ php /srv/www/xenforo/community/cmd.php hg:run-jobs
Выполнение этой команды выполнит все невыполненные задания, а затем завершится сообщением о том, есть ли еще задания, ожидающие выполнения, или нет. При выполнении этой команды из cron рекомендуется использовать флаг
--quiet
(или
-q
) для подавления вывода.
Как только вы убедитесь, что программа запуска заданий работает правильно, вам нужно будет создать свою собственную задачу cron, чтобы запускать ее по выбранному вами расписанию.
ПРИМЕЧАНИЕ: если у вас уже настроена задача cron для запуска
xf:run-jobs
, просто отключите ее и замените идентичной задачей, которая выполняется
hg:run-jobs
вместо нее.
Подход № 1 с использованием crontab:
Настоятельно рекомендуется запускать задачу cron от имени пользователя веб-сервера, чтобы предотвратить возможные проблемы с разрешениями.
Например, в Ubuntu с пользователем веб-сервера www-data установите задачу cron, выполнив следующую команду:
HTML:
$ sudo crontab -u www-data -e
Отредактируйте файл crontab и добавьте:
HTML:
* * * * * php /path/to/your/forum/root/cmd.php --quiet hg:run-jobs
Сохраните crontab.
Подход № 2 с использованием cron.d:
Вместо использования crontab некоторые дистрибутивы Linux создают хорошо известный каталог, который автоматически проверяется на выполнение задач cron. В случае Ubuntu вы можете создавать файлы, в
/etc/cron.d/
которых вы указываете расписание, пользователя для выполнения команды и саму команду.
Создайте файл
/etc/cron.d/
со следующим содержимым:
HTML:
* * * * * webserver-user php /path/to/your/forum/root/cmd.php --quiet hg:run-jobs
... где
webserver-user
изменено на имя пользователя, от имени которого работает ваш веб-сервер, и измените путь к корню вашего форума.
Опять же, используя наш предыдущий пример, где пользователь веб-сервера
www-data
, а корень нашего форума
/srv/www/xenforo/community
Я бы выполнил следующую команду для создания файла cron:
HTML:
echo "* * * * * www-data php /srv/www/xenforo/community/cmd.php --quiet hg:run-jobs" | sudo tee -a /etc/cron.d/xenforo
Оба варианта (crontab и cron.d) будут запускать job runner каждую минуту, проверяя наличие невыполненных заданий для запуска.
По умолчанию программа выполнения заданий будет выполняться максимум 30 секунд, выполняя все невыполненные задания, пока в очереди не останется больше выполняемых заданий.
Обновление с версии addon v1.x после обновления XenForo до версии v2.2
версия v2.0 этого дополнения изменяет имя команды и максимально допустимое время выполнения. Обратите внимание также, что
--time
опция в версии v1.x была переименована в
--max-execution-time
в соответствии с core job runner, представленным в XF версии v2.2.
Для обновления:
- Обновитесь до XF v2.2 RC2 или более поздней версии
- Установите версию дополнения v2.0.x
- измените запись cron в unix на execute
hg:run-jobs
вместо
xf:run-jobs
- если вы используете эту
--time
опцию, переименуйте ее в
--max-execution-time
- необязательно: настройте
--max-execution-time
параметр на любой срок до 600 секунд (10 минут), чтобы обработка задания занимала столько времени, сколько требуется. Например: позволит исполнителю задания выполняться до 3 минут одновременно
--max-execution-time=180
Конфигурация
Вы можете настроить максимальное время выполнения задания Runner, указав
--max-execution-time=[TIME]
опцию в командной строке.
Например, чтобы разрешить выполнение задания runner в течение максимум 45 секунд:
HTML:
$ php <path to your forum root>/cmd.php --max-execution-time=45 hg:run-jobs
Это дополнение использует файлы блокировки, чтобы предотвратить одновременное выполнение нескольких команд запуска заданий, что также позволяет нам запускать команду в течение более длительных периодов времени на загруженных сайтах.
Максимально допустимое время выполнения составляет 10 минут (600 секунд). Команда будет выполняться до тех пор, пока не найдет больше невыполненных заданий, а затем остановится, поэтому время выполнения обычно составляет всего несколько секунд.
Для дальнейшей настройки выполнения вашего задания вы также можете настроить максимальное время, разрешенное для выполнения каждого задания.
Это настраивается с помощью XenForo config.php Вариант:
PHP:
$config['jobMaxRunTime'] = 8;
Этот
jobMaxRunTime
параметр настраивает количество времени в секундах, в течение которого обрабатываемым заданиям будет разрешено выполняться, прежде чем они будут приостановлены для дальнейшей обработки при другом обходе, если это возможно. Настройка по умолчанию оптимизирована для запуска запуска заданий в браузере, поэтому, чтобы задания выполнялись дольше в среде CLI, вы можете настроить это значение на более высокое.
В целом рекомендуется, чтобы этот параметр сохранял относительно небольшое значение, чтобы избежать ситуации, когда одно очень длинное задание может помешать своевременному выполнению других заданий. Может потребоваться некоторое экспериментирование, чтобы найти оптимальное значение для загрузки вашего сервера и размера форума. Если вы сомневаетесь, оставьте значение по умолчанию равным 8 секундам.
Использование
run-jobs
Команда должна выполняться автоматически с использованием задачи cron в соответствии с приведенными выше инструкциями.
Показать задания
hg:show-jobs
Команда выводит список всех ожидающих выполнения заданий, чтобы вы могли видеть, насколько заполнена очередь заданий.
По умолчанию будут показаны только следующие запланированные 100 заданий, вы можете использовать эту
--all
опцию для отображения полного списка всех ожидающих заданий.
Всегда должно отображаться как минимум два задания: основное задание Cron и задание проверки обновления.
Bash:
$ php cmd.php xf:show-jobs
2 pending jobs found
+----------------+-----------------+----------------------+----------------------+
| Key | Class | Next Run | Last Run |
+----------------+-----------------+----------------------+----------------------+
| cron | XF\Job\Cron | 11-Apr-2019 10:52:01 | 11-Apr-2019 10:52:31 |
| xfUpgradeCheck | XF:UpgradeCheck | 12-Apr-2019 00:12:21 | 10-Apr-2019 21:24:03 |
+----------------+-----------------+----------------------+----------------------+
The current time is: 11-Apr-2019 10:52:31 (UTC+10:00)
Задания для отладки
Существуют обширные средства отладки, помогающие выявлять проблемы с заданиями и задачами Cron.
Для запуска в режиме отладки сначала отключите cron Unix, который автоматически запускает задания (не забудьте снова включить его, как только вы закончите отладку!), А затем используйте параметры детализации (Verbose:
-v
, Very verbose:
-vv
или Debug:
-vvv
) для
hg:run-jobs
команды, чтобы указать уровень вывода для отображенияна консоли.
Вывод выводится на консоль и имеет формат, аналогичный формату, используемому библиотекой Monolog (хотя мы не используем Monolog для генерации вывода).
Например, подробный вариант
-v
:
Bash:
$ php cmd.php hg:run-jobs -v
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry XF\Cron\CleanUp::runUserDowngrade executed in 0.01 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry Hampel\LogDigest\Cron\SendLogs::serverError executed in 0.00 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry XF\Cron\MemberStats::rebuildMemberStatsCache executed in 0.00 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry Hampel\Slack\Cron\NotifyLogs::notify executed in 0.03 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry XF\Cron\Feeder::importFeeds executed in 0.01 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry XFMG\Cron\RandomCache::generateRandomMediaCache executed in 0.07 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry XF\Cron\EmailBounce::process executed in 0.00 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Cron entry XF\Cron\Counters::rebuildForumStatistics executed in 0.02 seconds
[2019-11-27 23:53:09] XF\Job\Cron: Job executed in 0.20 seconds
No more runnable jobs pending
Очень подробный вариант
-vv
добавляет контекст, обычно о
JobResult
:
Bash:
$ php cmd.php hg:run-jobs -vv
[2019-11-27 23:49:49] XF\Job\Cron: Cron entry Hampel\Slack\Cron\NotifyLogs::notify executed in 0.01 seconds {"entry_id":"slackNotifyServerErrors","cron_class":"Hampel\\Slack\\Cron\\NotifyLogs","cron_method":"notify","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":-1}},"active":true,"next_run":1574898543,"addon_id":"Hampel\/Slack"}
[2019-11-27 23:49:49] XF\Job\Cron: Cron entry Hampel\SparkPost\Cron\MessageEvents::fetchMessageEvents executed in 0.00 seconds {"entry_id":"sparkpostMessageEvents","cron_class":"Hampel\\SparkPost\\Cron\\MessageEvents","cron_method":"fetchMessageEvents","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":19,"1":49}},"active":true,"next_run":1574898543,"addon_id":"Hampel\/SparkPost"}
[2019-11-27 23:49:49] XF\Job\Cron: Job executed in 0.03 seconds {"completed":false,"jobId":2,"continueDate":1574898603,"continueDate_formatted":"2019-11-27 23:50:03 UTC","statusMessage":"Running... Cron entries"}
[2019-11-27 23:49:49] Hampel\SparkPost:MessageEvent: Job executed in 0.83 seconds {"completed":true,"jobId":12,"continueDate":null,"continueDate_formatted":"","statusMessage":""}
No more runnable jobs pending
И, наконец, опция отладки
-vvv
добавляет дополнительную информацию о задании:
Bash:
$ php cmd.php hg:run-jobs -vvv
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\Feeder::importFeeds executed in 0.01 seconds {"entry_id":"feeder","cron_class":"XF\\Cron\\Feeder","cron_method":"importFeeds","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":2,"1":12,"2":22,"3":32,"4":42,"5":52}},"active":true,"next_run":1574879524,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\Counters::rebuildForumStatistics executed in 0.02 seconds {"entry_id":"forumStatistics","cron_class":"XF\\Cron\\Counters","cron_method":"rebuildForumStatistics","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":3,"1":13,"2":23,"3":33,"4":43,"5":53}},"active":true,"next_run":1574879584,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\MemberStats::rebuildMemberStatsCache executed in 0.03 seconds {"entry_id":"memberStatsCache","cron_class":"XF\\Cron\\MemberStats","cron_method":"rebuildMemberStatsCache","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":0,"1":10,"2":20,"3":30,"4":40,"5":50}},"active":true,"next_run":1574880004,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\Trophy::runTrophyCheck executed in 0.00 seconds {"entry_id":"trophy","cron_class":"XF\\Cron\\Trophy","cron_method":"runTrophyCheck","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":40}},"active":true,"next_run":1574880004,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XFMG\Cron\Statistics::cacheGalleryStatistics executed in 0.01 seconds {"entry_id":"xfmgCacheStats","cron_class":"XFMG\\Cron\\Statistics","cron_method":"cacheGalleryStatistics","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":10,"1":40}},"active":true,"next_run":1574880004,"addon_id":"XFMG"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\CleanUp::expireTempUserChanges executed in 0.00 seconds {"entry_id":"expireTempUserChanges","cron_class":"XF\\Cron\\CleanUp","cron_method":"expireTempUserChanges","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":42}},"active":true,"next_run":1574880124,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XFMG\Cron\RandomCache::generateRandomAlbumCache executed in 0.02 seconds {"entry_id":"xfmgGenerateRandomAlbum","cron_class":"XFMG\\Cron\\RandomCache","cron_method":"generateRandomAlbumCache","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":12,"1":42}},"active":true,"next_run":1574880124,"addon_id":"XFMG"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\EmailUnsubscribe::process executed in 0.00 seconds {"entry_id":"emailUnsubscribe","cron_class":"XF\\Cron\\EmailUnsubscribe","cron_method":"process","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":13,"1":43}},"active":true,"next_run":1574880184,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Cron entry XF\Cron\Ban::deleteExpiredBans executed in 0.01 seconds {"entry_id":"deleteExpiredBans","cron_class":"XF\\Cron\\Ban","cron_method":"deleteExpiredBans","run_rules":{"day_type":"dom","dom":{"0":-1},"hours":{"0":-1},"minutes":{"0":45}},"active":true,"next_run":1574880304,"addon_id":"XF"} {}
[2019-11-27 23:48:03] XF\Job\Cron: Job executed in 0.32 seconds {"completed":false,"jobId":2,"continueDate":1574898543,"continueDate_formatted":"2019-11-27 23:49:03 UTC","statusMessage":"Running... Cron entries"} {"job_id":2,"unique_key":"cron","execute_class":"XF\\Job\\Cron","execute_data":{},"manual_execute":0,"trigger_date":1574879464,"last_run_date":1574879405,"trigger_date_formatted":"2019-11-27 18:31:04 UTC","last_run_date_formatted":"2019-11-27 18:30:05 UTC"}
[2019-11-27 23:48:03] Hampel\SparkPost:MessageEvent: Job executed in 0.90 seconds {"completed":true,"jobId":10,"continueDate":null,"continueDate_formatted":"","statusMessage":""} {"job_id":10,"unique_key":"SparkPostMessageEvents","execute_class":"Hampel\\SparkPost:MessageEvent","execute_data":{},"manual_execute":0,"trigger_date":1574898483,"last_run_date":null,"trigger_date_formatted":"2019-11-27 23:48:03 UTC","last_run_date_formatted":""}
[2019-11-27 23:48:03] Hampel\SparkPost:EmailBounce: Job executed in 0.02 seconds {"completed":true,"jobId":11,"continueDate":null,"continueDate_formatted":"","statusMessage":""} {"job_id":11,"unique_key":"SparkPostEmailBounce","execute_class":"Hampel\\SparkPost:EmailBounce","execute_data":{},"manual_execute":0,"trigger_date":1574898483,"last_run_date":null,"trigger_date_formatted":"2019-11-27 23:48:03 UTC","last_run_date_formatted":""}
No more runnable jobs pending
Отладка пользовательских заданий
Вы можете добавить дополнительную отладку к своим пользовательским заданиям.
Добавьте следующую функцию в свой класс заданий для вызова
logJobProgress
функции нашего класса Logger:
PHP:
protected function log($message, array $context = [])
{
// check to see if we actually have a logger available and abort if not
if (!isset($this->app['cli.logger'])) return;
/** @var Logger $logger */
$logger = $this->app['cli.logger'];
$logger->logJobProgress($message, $context, $this);
}
Затем вы можете вызвать
log()
функцию в своем коде задания для отправки информации на консоль, когда выполнение задания выполняется в подробном режиме.
Например, смотрите тестовое задание, включенное в это дополнение
Hampel\JobRunner\Job\TestJob
:
PHP:
public function run($maxRunTime)
{
$this->log("About to start test job", $this->data);
$mail = $this->app->mailer()->newMail();
$mail->setTo($this->data['email']);
$mail->setContent(
"Test job",
"This is an email sent from a test job"
);
$sent = $mail->send();
$this->log("Sent mail", ['sent' => $sent]);
return $this->complete();
}
Приведенный выше код сгенерирует следующий вывод, когда программа выполнения задания находится в режиме отладки:
Bash:
$ php cmd.php hg:run-jobs -vvv
[2019-11-28 00:26:21] Hampel\JobRunner:TestJob: About to start test job {"email":"foo@example.com"} {"job_id":17,"class":"Hampel\\JobRunner\\Job\\TestJob","status_message":"Testing jobs","data":{"email":"foo@example.com"},"execution_time":"0.00"}
[2019-11-28 00:26:21] Hampel\JobRunner:TestJob: Sent mail {"sent":1} {"job_id":17,"class":"Hampel\\JobRunner\\Job\\TestJob","status_message":"Testing jobs","data":{"email":"foo@example.com"},"execution_time":"0.95"}
[2019-11-28 00:26:21] Hampel\JobRunner:TestJob: Job executed in 0.95 seconds {"completed":true,"jobId":17,"continueDate":null,"continueDate_formatted":"","statusMessage":""} {"job_id":17,"unique_key":null,"execute_class":"Hampel\\JobRunner:TestJob","execute_data":{"email":"foo@example.com"},"manual_execute":0,"trigger_date":1574900777,"last_run_date":null,"trigger_date_formatted":"2019-11-28 00:26:17 UTC","last_run_date_formatted":""}
No more runnable jobs pending
При запуске в тихом режиме вывод не будет отображаться - и, что более важно, если этот аддон отключен, код ведения журнала не нужно будет удалять. Важной частью является
if (!isset(\XF::app['cli.logger'])) return;
строка, которая будет прервана, если наш регистратор недоступен.
Отладка пользовательских задач Cron
Используя аналогичный механизм, мы также можем добавлять отладочный код в наши пользовательские задачи Cron:
Добавьте немного другую функцию в свои задачи Cron для вызова
log()
функции нашего класса Logger:
HTML:
protected static function log($message, array $context = [])
{
// check to see if we actually have a logger available and abort if not
if (!isset(\XF::app['cli.logger'])) return;
/** @var Logger $logger */
$logger = \XF::app['cli.logger'];
$logger->log("XF\Job\Cron", $message, $context);
}
Затем просто вызовите что-то вроде:
self::log("some message about something happening", ['key' => 'value']);
в вашем коде для вывода информации на консоль, когда выполнение задания выполняется в подробном режиме.
Черта регистратора
Существует также черта, которую вы можете включить в свои классы:
Hampel\JobRunner\Cli\LoggerTrait
которая реализует некоторые базовые функции ведения журнала, которые вы можете вызывать из своего кода:
- getLogger
- войти
- logQuiet (будет отображаться, даже если
-q
опция указана для запуска задания) - используйте это только для критических ошибок - Логнормальный (будет отображаться без подробностей или выше)
- logVerbose (будет отображаться только для
-v
опции или выше) - logVeryVerbose (будет отображаться только для
-vv
опции или выше) - отладка (будет отображаться, только если
-vvv
опция option указана для запуска задания)
hg:run-jobs
в обычном или тихом режиме ни один из выходных данных не отображается, если он не использует logNormal или logQuiet (которые следует использовать только для ошибок).
Отладка задач Cron
Начиная с версии 2.0 beta 3, появились две новые команды для работы с задачами XF cron:
Показать Crons
В
hg:show-crons
команде будут перечислены все ваши активные задачи XF cron
Bash:
$ cmd.php hg:show-crons
19 active cron entries found
+---------------------------+----------------------+--------------------------+
| ID | Next Run (UTC+10:00) | Addon |
+---------------------------+----------------------+--------------------------+
| forumStatistics | 29-Sep-2020 06:53 | XF |
| emailBounce | 29-Sep-2020 06:53 | XF |
| warningExpiry | 29-Sep-2020 06:55 | XF |
| rebuildSearchForumCache | 29-Sep-2020 07:00 | XF |
| memberStatsCache | 29-Sep-2020 07:00 | XF |
| feeder | 29-Sep-2020 07:02 | XF |
| cleanUpHourly | 29-Sep-2020 07:10 | XF |
| emailUnsubscribe | 29-Sep-2020 07:13 | XF |
| userGroupPromotions | 29-Sep-2020 07:20 | XF |
| views | 29-Sep-2020 07:30 | XF |
| trophy | 29-Sep-2020 07:40 | XF |
| expireTempUserChanges | 29-Sep-2020 07:42 | XF |
| deleteExpiredBans | 29-Sep-2020 07:45 | XF |
| downgradeExpired | 29-Sep-2020 07:50 | XF |
| fileCheck | 29-Sep-2020 10:10 | XF |
| dailyStats | 29-Sep-2020 10:30 | XF |
| cleanUpDaily | 29-Sep-2020 13:00 | XF |
| activitySummaryEmail | 30-Sep-2020 00:20 | XF |
| sitemap | 30-Sep-2020 15:37 | XF |
+---------------------------+----------------------+--------------------------+
The current time is: 29-Sep-2020 06:52:05 (UTC+10:00)
Вы можете указать три параметра командной строки:
-a
или
--all
показывает все задачи cron, включая отключенные задачи-m
или
--method
включает
class::method
в себя для каждой задачи cron-s
или
--sort
указывает столбец сортировки для списка (дата, идентификатор или дополнение)
Запустите Cron
hg:run-cron
Команда выполнит задачу XF cron - просто укажите идентификатор cron в качестве аргумента.
Например:
cmd.php hg:run-cron activitySummaryEmail
будет запущена задача cron "Отправить сводку активности по электронной почте".
По умолчанию отключенные задачи cron не могут быть запущены, поэтому вы можете переопределить это, указав параметр
-f
или
--force
в командной строке.
Здесь работают те же флаги детализации - поэтому укажите
-v
,
-vv
или
-vvv
для генерации желаемого уровня вывода.