Як вимкнути стандартний планувальник WordPress та переключитись на серверний?
Вбудований планувальник WordPress — WP_Cron не завжди відрізняється стабільністю та гнучкістю роботи. Запускається тоді, коли бажає, а системні ресурси споживає нерівномірно… Тому, один з шляхів оптимізації WordPress — це відключення стандартного планувальника і перехід на серверну службу crontab. Як це зробити та що це у висновку дає — далі поговоримо у цій статті.
Що таке Cron і WP Cron?
Cron — це консольний планувальник завдань, утиліта OC Unix/Linux. Використовується для автоматичного виконання команд і сценаріїв, розкладу в заданий час. Назва Cron походить від грецького χρόνος (Chronos) — час.
Wp Cron — це вбудований скрипт WordPress (wp-cron.php), який створений для автоматичного планування й виконання різних задач, наприклад:
- Оновлення системи;
- Публікація запланованих публікацій;
- Email-сповіщення і розсилки;
- Очищення кошика;
- Скидання кешу;
- Створення резервних копій і ревізій.
- Виконання тих чи інших сценарії плагінів.
Головний недолік WP Cron — він виконується в залежності від кількості запитів до файлу wp-cron.php. Якщо у сайту великий трафік — він буде навантажувати систему. Це за деяких обставин навіть може спричинити DDOS. Якщо ж у сайту немає відвідувачів — то відповідно планувальник не запуститься.
Офіційна документація по WordPress CRON:
Як відключити WP Cron?
Достатньо перейти у кореневу директорію сайту та внести правку у файл конфігурації WordPres — wp-config.php. А саме — додати або змінити директиву:
define( 'DISABLE_WP_CRON', true );
Як включити серверний cron?
Необхідно підключитися до сервера по SSH і в командному рядку виконати:
crontab -e
При першому запуску, планувальник запитає який текстовий редактор обрати. Оберіть Nano — він самий легкий і простіший.
Після цього ви перейдете у редагування файлу планувальника і тут треба додати команду запуску планувальника на сервері.
В залежності від налаштувань веб-сервера і операційної системи вона може відрізнятися.
У більшості випадків спрацює команда wget:
*/5 * * * * wget -qO- https://domain.com/wp-cron.php &> /dev/null
Таким чином, кожні 5 хвилин сервер буде звертатись в автоматичному режимі до файлу wp-cron.php й виконуватиметься скрипт планувальника.
Існує також інший спосіб запуску Cron— через команду php. (На деяких серверах спрацює тільки він). Рекомендую наступну конфігурацію запуску:
*/1 * * * * cd /abs_path/domain.com/public_html; php wp-cron.php doing_wp_cron > /dev/null 2>&1
За бажанням, можна скористатися генераторами Сronjob:
Якщо Cron з якигось причин не працює, протестувати його можна так.
Заувага: Для власників серверів на LiteSpeed/OpenLiteSpeed, якщо ви у цілях безпеки хочете перекрити будь-які зовнішні запити з інтернету до wp-cron.php, окрім звісно вашого сервера, необхідно перейти в меню Server Configuration > General й увімкнути опцію Use Client IP in Header, а потім для Virtual Host (домену) прописати окремі правила в Rewite Rules:
RewriteCond %{REMOTE_ADDR} !^XXX\.XXX\.XXX\.XXX
RewriteCond %{REQUEST_URI} xmlrpc.php|wp-cron.php [NC]
RewriteRule .* - [F,L]
Як перевірити роботу планувальника WordPress?
Для цього існують спеціальні плагіни, наприклад:
та
Встановивши один із них, ви зможете через спеціальну вкладку у панелі керування WordPress відстежувати статус виконання усіх завдань.
UPD: Є підозра, що один із моїх сайтів був зламаний саме через плагін WP-CRONTROL, але це вимагає власного підтвердження.
Автор: Cr0n