Cron — планировщик задач Linux. Он запускает скрипты по расписанию: каждую минуту, ежедневно, еженедельно. В cPanel есть удобный интерфейс для управления cron без знания синтаксиса.
Создание cron-задачи в cPanel
- Войдите в cPanel → Дополнительно → Задания Cron
- Выберите готовый период (каждую минуту, час, день) или настройте вручную
- В поле Команда укажите команду или путь к скрипту
- Нажмите Добавить задание Cron

Синтаксис cron
# минута час день месяц день_недели команда
# Каждые 5 минут:
*/5 * * * * /usr/bin/php /home/user/public_html/cron.php
# Каждый день в 3:00
0 3 * * * /usr/bin/php /home/user/public_html/backup.php
# По понедельникам в 9:00
0 9 * * 1 /usr/bin/php /home/user/public_html/report.php
Практические примеры
WordPress: wp-cron
Отключите встроенный WP-Cron (он нагружает сервер при каждом визите) и замените реальным:
# В wp-config.php добавьте:
define('DISABLE_WP_CRON', true);
# Cron задача (каждые 5 минут):
*/5 * * * * /usr/bin/php /home/user/public_html/wp-cron.php
Ежедневная очистка логов
0 2 * * * find /home/user/public_html/logs -name "*.log" -mtime +30 -delete
Резервная копия MySQL
0 4 * * * /usr/bin/mysqldump -u dbuser -ppassword mydb > /home/user/backups/db-$(date +\%Y\%m\%d).sql
/usr/bin/php или /usr/local/bin/php. Найдите точный путь через cPanel → PHP → Версии PHP.MAILTO=your@email.comМониторинг через внешний сервис (dead man's switch)
Cron не скажет вам, что задача перестала запускаться вовсе — например, если аккаунт временно заблокирован или упал сервер. Для критичных задач (бэкап БД, отправка отчётов) добавьте проверку через сторонний сервис вроде healthchecks.io или cronitor.io: он ждёт HTTP-пинг в заданный интервал и присылает алерт, если пинга не было.
# В конец команды добавляем curl-пинг после успешного выполнения
0 4 * * * /usr/bin/mysqldump -u dbuser -ppassword mydb > /home/user/backups/db-$(date +\%Y\%m\%d).sql && curl -fsS -m 10 https://hc-ping.com/your-uuid-here
- Пинг отправляется только при успешном завершении — если mysqldump упадёт с ошибкой,
&&остановит цепочку и пинг не уйдёт - Сервис пришлёт письмо или сообщение в Telegram, если ожидаемый пинг не пришёл вовремя
- Так решается главная проблема штатных уведомлений cPanel: они молчат, если задача вообще перестала запускаться
Частые ошибки cron и их причины
| Сообщение в логе или письме | Что означает |
|---|---|
| /bin/sh: 1: php: not found | В команде указан просто php без полного пути. Cron выполняет команды с минимальным PATH и не видит алиасы оболочки пользователя |
| Permission denied | Файл скрипта не помечен исполняемым, либо у владельца задачи нет прав на путь, указанный в команде |
| Задача сработала дважды, вторая половина команды пропала | Символ % в команде не экранирован. Cron воспринимает нессимволизированный % как перевод строки и обрезает всё, что после него |
| Письмо с ошибкой не приходит, хотя указан MAILTO | Хостинг блокирует исходящую почту с локального MTA либо ящик в MAILTO не существует |
| mysqldump: Got error: 1045: Access denied | Пароль в команде дампа устарел после смены пароля БД в cPanel → MySQL Databases |
Когда cron в cPanel не подходит
- Нужна очередь задач с повторными попытками и приоритетами — для этого нужен постоянно работающий воркер (Supervisor, systemd), а на shared-хостинге такого доступа нет
- Задачу нужно запускать чаще раза в минуту — минимальный шаг стандартного cron составляет 60 секунд
- Скрипт иногда выполняется дольше, чем интервал запуска — без lock-файла соседние запуски начнут накладываться друг на друга и создавать гонки
- Нужны системные задачи с правами root (ротация логов сервера, обновление пакетов ОС) — на аккаунте доступен только crontab самого пользователя
- Нужна цепочка из нескольких зависимых шагов (сначала выгрузка, потом импорт, потом уведомление) — cron не умеет ждать завершения одной задачи перед запуском другой, кроме грубой склейки через
&&в одной строке
Проверка результата выполнения
После добавления задачи не полагайтесь на то, что «раз ошибки не видно — всё работает». Проверяйте результат явно, а разбор причин зависших или падающих заданий удобно сверять со статьями про диагностику error_log в cPanel и про автоматическое резервное копирование.
# Список активных задач текущего пользователя
crontab -l
# Убедиться, что бэкап реально создался и не пустой
ls -lh /home/user/backups/
# Файл размером 0 байт почти всегда значит,
# что mysqldump упал с ошибкой доступа или диска не хватило