August 25, 2026 · by Alex M.
Управление сервером неизбежно включает повторяющиеся задачи: резервное копирование, очистка временных файлов, отправка отчётов, обновление баз данных. Выполнять их вручную — значит тратить время и рисковать ошибками. Решение давно встроено в любой Linux-дистрибутив и называется cron — планировщик задач, работающий в фоновом режиме.
В этом руководстве вы узнаете, как правильно настроить cron jobs на VPS Linux — от базового синтаксиса до продвинутых примеров, логирования и устранения неполадок.
Cron — это системный демон, который постоянно работает в фоне и проверяет, есть ли задачи, запланированные к выполнению. Задачи определяются в специальных файлах — crontab (cron table).
Каждый пользователь Linux может иметь свой crontab, а в системе также есть глобальный /etc/crontab. Демон cron читает эти файлы и выполняет команды в назначенное время.
systemctl status cron # Debian/Ubuntu
systemctl status crond # CentOS/AlmaLinux/Rocky
Если сервис не активен, запустите его:
systemctl enable --now cron
Каждая строка crontab имеет следующий формат:
* * * * * /путь/к/команде
│ │ │ │ │
│ │ │ │ └── День недели (0-7, где 0 и 7 = воскресенье)
│ │ │ └──── Месяц (1-12)
│ │ └────── День месяца (1-31)
│ └──────── Час (0-23)
└────────── Минута (0-59)
| Оператор | Значение | Пример |
|---|---|---|
* |
Любое значение | * * * * * = каждую минуту |
, |
Список значений | 0 9,18 * * * = в 09:00 и 18:00 |
- |
Диапазон | 0 9-17 * * * = каждый час с 9 до 17 |
/ |
Шаг | */15 * * * * = каждые 15 минут |
Для редактирования crontab текущего пользователя:
crontab -e
Для просмотра существующих задач:
crontab -l
Для редактирования crontab другого пользователя (от root):
crontab -u www-data -e
Совет: При первом запуске система спросит, какой редактор использовать. Выберите
nano— он проще для начинающих.
0 2 * * * /usr/bin/mysqldump -u root -pВАШ_ПАРОЛЬ база_данных > /backup/db_$(date +\%Y\%m\%d).sql
Задача запускается каждую ночь в 02:00 и сохраняет дамп базы данных. На VPS NVMe высокая скорость записи сокращает время резервного копирования.
0 3 * * 0 /usr/bin/find /tmp -type f -mtime +7 -delete
Запускается каждое воскресенье в 03:00 и удаляет файлы из /tmp старше 7 дней.
0 0 1 * * /usr/bin/certbot renew --quiet && systemctl reload nginx
Проверяет и обновляет SSL-сертификаты в первый день каждого месяца. Незаменимо при использовании Let's Encrypt.
0 8 * * * /usr/bin/df -h | /usr/bin/mail -s "Отчёт диска $(hostname)" [email protected]
*/5 * * * * /usr/bin/php /var/www/html/wp-cron.php > /dev/null 2>&1
WordPress использует собственную систему cron, основанную на посещениях. Рекомендуется отключить WP-Cron и использовать системный cron — особенно на хостинге WordPress с высоким трафиком.
Cron запускается с минимальным окружением и не наследует переменные оболочки пользователя. Поэтому команды необходимо указывать с абсолютными путями.
В начале crontab можно определить глобальные переменные:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
[email protected]
MAILTO — адрес для отправки вывода команд (установите "" для отключения писем).PATH — пути для поиска команд.По умолчанию cron отправляет вывод по электронной почте. Лучшая практика — перенаправить вывод в лог-файлы:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
>> добавляет вывод в конец файла (не перезаписывает).2>&1 перенаправляет ошибки в тот же файл.Чтобы лог-файлы не росли бесконечно, используйте logrotate — важный инструмент для администрирования Linux-серверов.
Помимо пользовательских crontab, Linux предоставляет предустановленные директории:
| Директория | Частота |
|---|---|
/etc/cron.hourly/ |
Каждый час |
/etc/cron.daily/ |
Ежедневно |
/etc/cron.weekly/ |
Еженедельно |
/etc/cron.monthly/ |
Ежемесячно |
Чтобы добавить скрипт для ежедневного запуска, скопируйте его в /etc/cron.daily/ и назначьте права на выполнение:
chmod +x /etc/cron.daily/myscript.sh
Файлы в /etc/cron.d/ поддерживают полный синтаксис crontab с указанием пользователя:
0 4 * * * root /usr/local/bin/cleanup.sh
Неправильно настроенный cron может стать вектором атаки. Вот основные правила:
chmod 777 может изменить любой пользователь.bash
chmod 700 /usr/local/bin/backup.sh
chown root:root /usr/local/bin/backup.sh~/.my.cnf для MySQL)./etc/cron.allow и /etc/cron.deny.bash
grep CRON /var/log/syslog # Ubuntu/Debian
grep CRON /var/log/cron # CentOS/AlmaLinuxНа управляемом выделенном сервере эти вопросы берёт на себя наша команда специалистов.
Если задача не выполняется, проверьте следующее:
chmod +x script.sh).source ~/.bashrc в начало скрипта или определите PATH в crontab.crontab -l и протестируйте команду вручную.systemctl status cron.# Быстрый тест: запустить команду от имени пользователя cron
su -s /bin/bash www-data -c "/usr/bin/php /var/www/html/script.php"
Современные дистрибутивы Linux (Ubuntu 20.04+, AlmaLinux 8+) предлагают systemd timers — более мощную альтернативу cron. Они позволяют:
Тем не менее для большинства задач cron остаётся простым, портативным и вполне достаточным инструментом.
Cron jobs — фундаментальный инструмент для любого системного администратора. Правильная настройка позволяет автоматизировать резервное копирование, обслуживание, отправку отчётов и многое другое — снижая вероятность ошибок и экономя часы ручного труда.
Для надёжного выполнения автоматизированных задач вам нужна стабильная платформа. VPS NVMe от CLIQHOST обеспечивает выделенные ресурсы, высокую скорость I/O и полный root-доступ. Нужна помощь с настройкой сервера? Ознакомьтесь с нашими услугами администрирования серверов или свяжитесь с нами — мы готовы помочь.
Реальные отзывы клиентов, которые доверяют CLIQHOST за производительность, надёжность и профессиональную техническую поддержку.
"Перенесли интернет-магазин с зарубежного хостинга — разница огромная: страницы открываются мгновенно, а поддержка отвечает за минуты, на румынском."
"Перенесли 12 клиентских сайтов на CLIQHOST. Бесплатная миграция, нулевой даунтайм, а настройка cPanel — именно то, что нужно нашей команде. Очень рекомендую."
"Наш VPS NVMe спокойно держит пики трафика. Полный root, локальный дата-центр и оплата в MDL — всё, что мы хотели от провайдера."