CLI Job / Cron Runner

ПЛАГИН xF2 CLI Job / Cron Runner 2.1.1

Расширенный запуск заданий CLI для Unix cron с расширенной поддержкой отладки.
  • Автор xenforo2
  • Дата создания
Совместимость с XenForo
  1. 2.2
  2. 2.3
Это дополнение XenForo 2.x реализует расширенный запуск заданий с запуском CLI для использования с Unix 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 версий v2.2 и v2.3

Установка

Установите в соответствии с обычной установкой дополнения.

После установки перейдите на страницу Параметров системы и производительности и измените параметр запуска задания на "Серверный триггер".

1596700351453.webp


Сначала вы должны проверить, работает ли ваш job runner - выполните следующую команду из вашего CLI:
Bash:
$ php <path to your forum root>/cmd.php hg:run-jobs

Например, если у вас root на форуме /srv/www/xenforo/community, то команда job runner будет:
Bash:
$ php /srv/www/xenforo/community/cmd.php hg:run-jobs

Выполнение этой команды выполнит все невыполненные задания, а затем завершится сообщением о том, есть ли еще задания, ожидающие выполнения, или нет. При выполнении этой команды из cron рекомендуется использовать флаг --quiet (или -q) для подавления вывода.

Как только вы убедитесь, что job runner работает правильно, вам нужно будет создать свою собственную cron-задачу, чтобы запускать ее по выбранному вами расписанию.

ПРИМЕЧАНИЕ: если у вас уже настроена для запуска cron-задача, xf:run-jobs просто отключите ее и замените идентичной, которая выполняется hg:run-jobs вместо нее.

Подход № 1 с использованием crontab:

Настоятельно рекомендуется запускать cron-задачу от имени пользователя веб-сервера, чтобы предотвратить возможные проблемы с разрешениями.

Например, в Ubuntu с веб-сервером, использующим www-data, установите cron-задачу, выполнив следующую команду:
Bash:
$ sudo crontab -u www-data -e

Отредактируйте файл crontab и добавьте:
Bash:
    *       *       *       *       *       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/ со следующим содержимым:
Bash:
* * * * * webserver-user php /path/to/your/forum/root/cmd.php --quiet hg:run-jobs

... где webserver-user изменено на имя пользователя, от имени которого работает ваш веб-сервер, и изменен путь к корню вашего форума.

Опять же, используя наш предыдущий пример, где пользователь веб-сервера www-data, а корень нашего форума
/srv/www/xenforo/community Я бы выполнил следующую команду для создания cron-файла:
Bash:
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

версия 0 этого дополнения изменяет название команды и максимально допустимое время выполнения. Обратите также внимание, что --time опция в версии v1.x была переименована в --max-execution-time в соответствии с основным исполнителем заданий, представленным в XF версии v2.2.

Для обновления:
  1. Обновитесь до XF версии v2.2 RC2 или более поздней
  2. Установите версию дополнения v2.0.x
  3. измените запись cron в unix на execute hg:run-jobs вместо xf:run-jobs
  4. если вы используете опцию --time, переименуйте это в --max-execution-time
  5. необязательно: установите для параметра --max-execution-time значение до 600 секунд (10 минут), чтобы обработка задания занимала столько времени, сколько необходимо. Например: --max-execution-time=180 позволит исполнять Job Runner до 3 минут одновременно
Примечание: убедитесь, что у вас включен "Серверный триггер" в настройках администратора системы и производительности.
1598424966903.webp


Конфигурация

Вы можете настроить максимальное время выполнения job runner, указав --max-execution-time=[TIME] опцию в командной строке.


Например, чтобы разрешить выполнение job runner максимум в течение 45 секунд:
Bash:
$ php <path to your forum root>/cmd.php --max-execution-time=45 hg:run-jobs

Это дополнение использует файлы блокировки, чтобы предотвратить одновременное выполнение нескольких команд job runner, что также позволяет нам запускать команду в течение более длительных периодов времени на загруженных сайтах.

Максимально допустимое время выполнения - 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

Отладка пользовательских заданий

Вы можете добавить дополнительную отладку к своим пользовательским заданиям.

Добавьте следующую функцию в свой класс job для вызова logJobProgress функции нашего класса Logger:
Bash:
    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:
Bash:
    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:
Код:
    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']); в своем коде для вывода информации на консоль, когда Job Runner выполняется в подробном режиме.

Особенность регистратора

Также есть функция, которую вы можете включить в свои классы: Hampel\JobRunner\Cli\LoggerTrait которая реализует некоторые базовые функции ведения журнала, которые вы можете вызывать из своего кода:
  • getLogger
  • журнал
  • logQuiet (будет отображаться, даже если для запуска задания указан параметр -q) - используйте это только для критических ошибок
  • логИчески нормальный (будет отображаться без подробностей или выше)
  • logVerbose (будет отображаться только для -v опции или выше)
  • logVeryVerbose (будет отображаться только для -vv опции или выше)
  • отладка (будет отображаться, только если для запуска задания указан параметр -vvv option)
Нет необходимости удалять логирование или отладочный код из вашего аддона при развертывании - при запуске hg:run-jobs в обычном или тихом режиме ничего из выходных данных не отображается, если в нем не используется logNormal или logQuiet (которые следует использовать только для ошибок).

Отладка Cron-задач

Начиная с версии v2.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 , которую вы хотите запустить , который затем вы используете в другой новой команде ...

Запустить Cron

Команда hg:run-cron выполнит задачу XF cron - просто укажите cron ID в качестве аргумента.

Например: cmd.php hg:run-cron activitySummaryEmail запустит cron-задачу "Отправить сводку активности по электронной почте".

По умолчанию отключенные cron-задачи не могут запускаться, поэтому вы можете переопределить это, указав параметр -f или --force в командной строке.

Здесь работают те же флаги детализации - поэтому укажите -v, -vv или -vvv для создания желаемого уровня вывода.

Похожие ресурсы

[OzzModz] Job Runner Manager НетМеня
Позволяет видеть список текущих заданий и управлять ими
0,00 звёзд Оценок: 0
Скачиваний
2
Обновлено
Назад
Верх Низ