Монит является очень гибким инструментом мониторинга, помогает отслеживать работу Ваших услуг. Он может быть использован для отправки уведомлений, когда процессы аварийно останавливаются, то автоматически перезапускать их. На всех VPS и выделенных серверах мы создали для своих клиентов настройку Monit для упреждающего мониторинга.
Wp-cron может иногда останавливаться и появляются тысячи скрытых cronjobs, которые не работают. Вместо мониторинга вручную, эта статья покажет вам, как использовать Bash и WP-CLI, чтобы подсчитать, сколько cronjobs в очереди wp-cron. Далее мы настроим Monit для использования скрипта Bash и оповещение по электронной почте, если количество cronjobs в очереди превышает определенное число, которое вы укажете. Этот пост основан на том, как контролировать размер папки WordPress с Monit.
Эта команда WP-CLI перечислит события в wp-cron
wp cron event list
Для того, чтобы получить счетчик, можно удалить столбец заголовки строки из таблицы sed
а затем сосчитать линии с wc
wp cron event list --allow-root --skip-plugins --skip-themes | sed -n '1!p' | wc -l
Создание сценария
mkdir ~/scripts nano ~/scripts/wpcronchecker.sh
Вставить этот скрипт
#!/bin/bash # Автор from https://andreyex.ru #захват первой переменной WPPATH=$1 #захват второй переменной CRONTHRESHOLD=$2 #взять количество cronjob WPCRONCOUNT=$(wp cron event list --path=$WPPATH --allow-root --skip-plugins --skip-themes | sed -n '1!p' | wc -l) #вывод задачи cron для того чтобы Monit мог захватить его echo "$WP_PATH has $WPCRONCOUNT cronjobs" #предоставить код состояния для оповещения if [[ $WPCRONCOUNT -gt $(( $CRONTHRESHOLD )) ]]; then exit 1 fi
Сделайте скрипт исполняемым
chmod +x wpcronchecker.sh
Тест работает скрипт, передавая свой путь к папке установки WordPress в качестве первого параметра и число cronjobs, при превышении которого должно вызвать тревогу
bash wpcronchecker.sh /var/www/andreyex.ru/ 50
Вы получите этот выход
/var/www/andreyex.ru/ has 12 cronjobs
Теперь мы можем настроить Monit для использования скрипта Bash и отобразит его вывод
Если у вас есть модульная система для создания конфигураций MONIT, как указано в руководстве по установке MONIT, создайте новый фрагмент
sudo nano /etc/monit/conf.d/wpcroncheck
Если WordPress установка в /var/www/andreyex.ru
имеет cronjobs в очереди больше, чем 50
, мы получим уведомление по электронной почте.
Тогда каждые 1440 циклов линии означает, что Monit будет проверять каждый раз с интервалом 1440, определенный в /etc/monit/monitrc
check program wp-cron with path "/root/scripts/wpcronchecker.sh /var/www/andreyex.ru/ 50" every 1440 cycles if status != 0 then alert
Ctrl + X, Y и Enter, чтобы сохранить и выйти.
Синтаксис тестирования Monit действует с нашим новым добавлением проверки дискового пространства и оповещения.
sudo monit -t
Обновите Monit если не было никаких ошибок
sudo service monit reload
Проверьте в Monit и вы увидите работу wp-cron 🙂