Планировщик cron
Запускаем скрипты по расписанию: каждую ночь, каждый час, каждую минуту.
cron — это системный планировщик, который запускает заданные команды по расписанию; задания хранятся в таблице crontab.
Формат пяти полей
Каждая строка crontab — это пять полей расписания и команда. Поля задают минуту, час, день месяца, месяц и день недели.
┌───────── минута (0–59) │ ┌─────── час (0–23) │ │ ┌───── день месяца (1–31) │ │ │ ┌─── месяц (1–12) │ │ │ │ ┌─ день недели (0–7, 0 и 7 — воскресенье) │ │ │ │ │ * * * * * команда
Звёздочка означает «любое значение». Редактируют таблицу командой crontab -e, смотрят — crontab -l.
Примеры расписаний
# каждый день в 3:30 ночи
30 3 * * * /home/user/backup.sh
# каждый час в начале часа
0 * * * * /home/user/check-disk.sh
# каждые 15 минут
*/15 * * * * /home/user/ping.sh
# по будням в 9:00
0 9 * * 1-5 /home/user/report.shЗапись */15 значит «каждые 15 единиц», 1-5 — диапазон (пн–пт), запятая перечисляет значения (0,30 — в 0 и 30 минут).
Логирование задач
cron работает в фоне, и вы не увидите вывод скрипта на экране. Поэтому вывод перенаправляют в лог:
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1Здесь и обычный вывод, и ошибки дописываются в лог-файл — потом по нему легко понять, что пошло не так.
Как работает под капотом
Демон cron раз в минуту просыпается и сверяет текущее время с расписаниями в crontab. Совпавшие задания он запускает в МИНИМАЛЬНОМ окружении: своя короткая PATH (часто только /usr/bin:/bin), нет ваших переменных из .bashrc, рабочая папка — домашняя. Поэтому скрипт, который прекрасно работает в терминале, в cron может «не найти» команду или файл.
Частые ошибки
- Относительные пути. В cron рабочая папка иная — указывайте АБСОЛЮТНЫЕ пути и к скрипту, и к файлам внутри.
- Урезанный PATH. Команда вроде
dockerможет не найтись. ЗадайтеPATHв начале crontab или вызывайте программы по полному пути. - Нет логирования. Без
>> log 2>&1вы не узнаете, почему задача упала.
Итог
- cron-строка: пять полей (минута, час, день, месяц, день недели) и команда.
*/N— каждые N единиц,A-B— диапазон,A,B— перечисление; редактирование черезcrontab -e.- cron даёт урезанное окружение: используйте абсолютные пути и логируйте через
>> log 2>&1.