Что такое cron-задачи и как их настроить? Гид по Linux-планированию
Cron на Linux для авто-бэкапов, очистки логов и запуска скриптов. Синтаксис crontab, примеры и частые ошибки.
Хотите автоматический бэкап каждую ночь, еженедельную очистку логов или health-check каждые 5 минут? Cron — стандартный инструмент Linux. В этом гиде — синтаксис crontab, примеры и подводные камни.
Что такое cron?
Cron — Linux-демон, запускающий команды по расписанию. Каждую минуту читает crontab и триггерит назревшие задачи.
Синтаксис crontab
Строка cron — 5 полей времени + команда:
* * * * * команда
│ │ │ │ │
│ │ │ │ └── День недели (0-7, 0 и 7 = воскресенье)
│ │ │ └──── Месяц (1-12)
│ │ └────── День месяца (1-31)
│ └──────── Час (0-23)
└────────── Минута (0-59)
Практические примеры
| Выражение | Значение |
|---|---|
* * * * * | Каждую минуту |
*/5 * * * * | Каждые 5 минут |
0 * * * * | В начале каждого часа |
0 3 * * * | Ежедневно в 03:00 |
0 3 * * 1 | По понедельникам в 03:00 |
0 3 1 * * | 1-го числа каждого месяца 03:00 |
30 2 * * 1-5 | Будни 02:30 |
@reboot | При старте сервера |
@daily | Ежедневно 00:00 |
@weekly | Воскресенье 00:00 |
Тестируйте сложные выражения: crontab.guru
Как редактировать crontab
crontab -e # текущего пользователя
sudo crontab -e # root
crontab -l # список
crontab -r # удалить ВСЁ (осторожно!)
Первый раз — выбор редактора (nano — проще, или vim).
Примеры
Ночной бэкап
0 3 * * * /usr/local/bin/backup-wp.sh >> /var/log/backup.log 2>&1
Очистка логов раз в час
0 * * * * find /var/log/myapp -name "*.log" -mtime +30 -delete
Health-check каждые 5 минут
*/5 * * * * curl -s -o /dev/null -w "%{http_code}" https://ваш-сайт.com >> /var/log/health.log
Бэкап БД
30 2 * * * mysqldump -u root -p'ПАРОЛЬ' db | gzip > /backup/db-$(date +\%Y\%m\%d).sql.gz
⚠️ % в crontab спецсимвол — экранируйте \%.
Обновление сертификата
0 4 * * * certbot renew --quiet && systemctl reload nginx
Подробно про SSL — пост Let’s Encrypt.
Как проверить, что cron сработал
sudo systemctl status cron
sudo tail -f /var/log/syslog | grep CRON
sudo tail -f /var/log/cron
Для теста — запланируйте на 1-2 минуты вперёд и наблюдайте лог.
Подводные камни
- Cron не сработал: команды с абсолютным путём (
/usr/bin/php, а не простоphp) - Нет переменных окружения: cron с минимальным env → задайте
PATH=в начале скрипта - Забыть
%:date +%Y%m%dломается →\% - Не видно вывод: без mail-настройки STDOUT теряется →
>> log 2>&1 - Таймауты PHP/Node: запускается как CLI, нет web-timeout — но длинные скрипты в фон
- Часовой пояс: UTC-сервер сдвигает время →
sudo timedatectl set-timezone Europe/Moscow
Альтернатива systemd-timers (современнее)
systemd-таймеры современнее cron с лучшей интеграцией логов:
/etc/systemd/system/backup.service:
[Unit]
Description=Daily backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-wp.sh
/etc/systemd/system/backup.timer:
[Unit]
Description=Daily backup timer
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable --now backup.timer
sudo systemctl list-timers
Итог
Cron — основа автоматизации сервера. Учится за 5 минут, используется ежедневно. Бэкапы, очистка, мониторинг — всё через cron.
По теме: Бэкапы серверов · Расширение диска Linux
Похожие статьи
Возможно, вас также заинтересует.
Правило 3-2-1: как никогда не терять данные сервера
Правило резервного копирования 3-2-1 — золотой стандарт стратегии бэкапа сервера. Разбираем правило, автоматизацию и инфраструктуру KavesNET.
Читать далее
Как мигрировать сайт с Plesk на Plesk: гид по Migrator
Перенос сайтов, почты, БД и DNS за один раз с Plesk Migrator. Настройка, тест-миграция и cutover.
Читать далее
FileZilla: миграция файлов между двумя VDS
Перенос сайта со старого на новый VDS: FileZilla по FTP/SFTP, советы по скорости, права и обработка ошибок.
Читать далее