К основному содержимому

Cron-задачи в cPanel: автоматизация задач на хостинге

Хостинг и cPanel · 20.06.2025 · 4 мин чтения
Иллюстрация к статье «Cron-задачи в cPanel: автоматизация задач на хостинге»

Cron — планировщик задач Linux. Он запускает скрипты по расписанию: каждую минуту, ежедневно, еженедельно. В cPanel есть удобный интерфейс для управления cron без знания синтаксиса.

Создание cron-задачи в cPanel

  1. Войдите в cPanel → Дополнительно → Задания Cron
  2. Выберите готовый период (каждую минуту, час, день) или настройте вручную
  3. В поле Команда укажите команду или путь к скрипту
  4. Нажмите Добавить задание 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
💡 Путь к PHP в cPanel обычно /usr/bin/php или /usr/local/bin/php. Найдите точный путь через cPanel → PHP → Версии PHP.
⚠️ Cron не выводит ошибки на экран. Чтобы получать уведомления об ошибках, добавьте в начало crontab: 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 упал с ошибкой доступа или диска не хватило
Статья помогла?
← Назад в базу знаний Задать вопрос поддержке