Вбудований планувальник WordPress — WP_Cron не завжди відрізняється стабільністю та гнучкістю роботи. Запускається тоді, коли бажає, а системні ресурси споживає нерівномірно… Тому, один з шляхів оптимізації WordPress — це відключення стандартного планувальника і перехід на серверну службу crontab. Як це зробити та що це у висновку дає — далі поговоримо у цій статті.
Що таке Cron і WP Cron?
Cron — це консольний планувальник завдань, вбудована утиліта OC Linux. Використовується для автоматичного виконання команд і сценаріїв, розкладу в заданий час. Назва Cron походить від грецького χρόνος (Chronos) — час.
WP-CRON — це вбудований скрипт WordPress (wp-cron.php), який створений для автоматичного планування й виконання різних задач, наприклад:
- Оновлення системи;
- Публікація запланованих публікацій;
- Email-сповіщення і розсилки;
- Очищення кошика;
- Скидання кешу;
- Створення резервних копій і ревізій.
- Виконання тих чи інших сценарії плагінів.
Головний недолік WP Cron — він виконується в залежності від кількості запитів до файлу wp-cron.php. Якщо у сайту великий трафік — він буде навантажувати систему. Це за деяких обставин навіть може спричинити DDOS. Якщо ж у сайту немає відвідувачів — то відповідно планувальник не запуститься.
Офіційна документація по Cron від WordPress: https://developer.wordpress.org/plugins/cron/
Як відключити WP Cron?
Достатньо перейти у кореневу директорію сайту та внести правку у файл конфігурації WordPres — wp-config.php. А саме — додати або змінити директиву:
define( 'DISABLE_WP_CRON', true );
Як включити серверний cron?
Необхідно підключитися до сервера по SSH і в командному рядку виконати: EDITOR=nano crontab -e
Тепер потрібно додати команду, яка буде запускати на виконання wp-cron.php.
У більшості випадків спрацює команда wget:
*/5 * * * * wget -qO- https://example.com/wp-cron.php &> /dev/null Таким чином, кожні 5 хвилин сервер буде звертатись в автоматичному режимі до файлу wp-cron.php й виконуватиметься скрипт планувальника.
Інший спосіб запуску Cron — через php. (На деяких серверах спрацює тільки він). Рекомендую наступну конфігурацію запуску:
*/1 * * * * cd /abs_path/example.com/public_html; php wp-cron.php doing_wp_cron > /dev/null 2>&1
За бажанням, можна скористатися генераторами Сronjob >>
Заувага: Для власників серверів на 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?
Для цього існують спеціальні плагіни, наприклад Advanced Cron Manager:
Якщо Cron з якигось причин не працює, протестувати його можна з допомогою скрипта.
Автор: © Konrad Ravenstone, KR. Laboratories Research






