Cron — планувальник завдань Linux. Через ISPmanager ви можете додавати, редагувати і видаляти cron-завдання через графічний інтерфейс без редагування crontab вручну.
Створення cron-завдання
Головне меню → Cron → Створити.
| Поле | Опис |
|---|---|
| Користувач | Від чийого імені запускати |
| Хвилини | 0–59 або * (щохвилини) |
| Години | 0–23 або * |
| Дні місяця | 1–31 або * |
| Місяці | 1–12 або * |
| Дні тижня | 0–7 (0,7=нд) або * |
| Команда | Повний шлях до скрипта |
Приклади cron-завдань
# Щогодини
0 * * * * /usr/bin/php /var/www/user1/data/www/example.com/www/cron.php
# Щодня о 03:00
0 3 * * * /usr/bin/php /var/www/user1/data/www/example.com/www/cleanup.php
# Кожні 5 хвилин
*/5 * * * * /usr/bin/php /var/www/user1/data/www/example.com/www/queue.php
# WordPress WP-Cron через curl (рекомендується замість wp-cron.php)
*/5 * * * * /usr/bin/curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null
DISABLE_WP_CRON = true у wp-config.php) і запускати через системний cron — надійніше і швидше.WordPress Cron через системний cron
# wp-config.php
define('DISABLE_WP_CRON', true);
# Cron-завдання (кожні 5 хвилин)
*/5 * * * * /usr/bin/php /var/www/user1/data/www/example.com/www/wp-cron.php > /dev/null 2>&1
Логування виведення cron
# Зберігати виведення в лог-файл
0 3 * * * /usr/bin/php /var/www/cron.php >> /var/log/mycron.log 2>&1
# Ігнорувати виведення
0 3 * * * /usr/bin/php /var/www/cron.php > /dev/null 2>&1
/usr/bin/php8.2 або /usr/bin/php. Відносні шляхи не працюють у cron.Типові помилки cron в ISPmanager 6
| Симптом | Причина |
|---|---|
| sh: 1: /usr/bin/php: not found | На сервері увімкнено мультиверсійність PHP, і потрібний бінарник лежить не в /usr/bin/php, а, наприклад, в /opt/php-8.2/bin/php |
| Завдання не з'явилося в списку після створення | Форма зберігається лише кнопкою «Ok» внизу; перехід на іншу вкладку панелі без збереження скасовує введення |
| Команда обривається на символі % | % не екранований і сприймається cron як перехід на новий рядок — актуально для date +%Y%m%d у бекапах |
| Лист про помилку не приходить | ISPmanager 6 не пересилає виведення cron на пошту за замовчуванням — потрібно явно додати MAILTO на початок команди або перенаправити виведення у файл |
| Permission denied при редагуванні чужого завдання | Додатковий користувач або реселлер панелі не має прав рівня власника акаунта на цей cron |
| wp-cron.php запускається двічі поспіль | Інтервал cron збігається з TTL внутрішнього блокування WP-Cron; потрібно рознести розклади або додати lock-файл у сам скрипт |
| Завдання відпрацювало, але сайт не бачить змін | PHP-CLI, з-під якого запущено cron, і PHP-FPM веб-процесу використовують різні екземпляри OPcache; після деплою через cron потрібне окреме скидання кешу для веба |
Єдиний системний лог cron
Якщо завдань багато і зрозуміти, яке саме не спрацювало, складно — дивіться загальний лог cron-демона: він покаже сам факт запуску, навіть якщо PHP-скрипт усередині впав мовчки без виведення.
# На системах з systemd
journalctl -u cron --since today
# На системах з класичним syslog
grep CRON /var/log/syslog | tail -n 50
Коли cron в ISPmanager 6 не підходить
- Завдання треба запускати частіше разу на хвилину — мінімальний крок cron становить 60 секунд незалежно від панелі
- Потрібна черга з повторними спробами і пріоритетами — для постійно працюючого воркера (Supervisor, systemd unit) потрібні root-права, яких у звичайного акаунта ISPmanager немає
- Потрібен запуск операцій з правами root (оновлення системних пакетів, робота з іншими акаунтами) — доступний лише crontab користувача сайту
- Потрібен ланцюжок залежних кроків з умовною логікою — cron вміє лише грубе склеювання команд через
&&в одному рядку - Завдання має запускати зовнішня подія (webhook, зміна файлу, платіж від платіжної системи), а не час за розкладом — cron реагує лише на годинник, а не на події
Перевірка результату
Після створення завдання переконайтеся, що воно справді виконується і не падає мовчки — детальний розбір системних логів є у статті про логи і діагностику ISPmanager 6, а специфіку cron саме для WordPress — у статті про WordPress в ISPmanager 6. Просте правило: якщо після трьох запусків у лозі демона немає жодного рядка з іменем вашого завдання — проблема не в PHP-скрипті, а в самому записі crontab.
# Переглянути список системних cron-завдань конкретного користувача
crontab -l -u user1
# Перевірити останній виклик скрипта в лозі домену
tail -n 50 /var/www/user1/data/logs/example.com.log | grep cron.php