Планировщик cron в Linux: синтаксис и примеры задач
Калькулятор cron-выражений
минута час день_месяца месяц день_недели. Описание и ближайшие запуски посчитаются автоматически.Cron — стандартный планировщик задач в Linux: он запускает команды по расписанию (каждую минуту, час, день и т.д.). Расписание задаётся пятью полями в файле crontab. Разберём синтаксис и приведём готовые примеры.
Синтаксис crontab
Каждая строка задания состоит из пяти полей времени и команды:
* * * * * команда
│ │ │ │ │
│ │ │ │ └─ день недели (0–7, где 0 и 7 — воскресенье)
│ │ │ └─── месяц (1–12)
│ │ └───── день месяца (1–31)
│ └─────── час (0–23)
└───────── минута (0–59)
Специальные символы:
*— любое значение;*/5— каждые 5 единиц (например, каждые 5 минут);1,15— список значений;9-18— диапазон.
Как редактировать crontab
Открыть свой список задач для редактирования:
crontab -e
Посмотреть текущие задания:
crontab -l
Изменения применяются автоматически после сохранения — перезапускать ничего не нужно.
Примеры расписаний
| Расписание | Строка | Когда запускается |
|---|---|---|
| Каждую минуту | * * * * * |
ежеминутно |
| Каждые 5 минут | */5 * * * * |
0, 5, 10… |
| Каждый час | 0 * * * * |
в начале часа |
| Ежедневно в 3:30 | 30 3 * * * |
раз в сутки |
| По будням в 9:00 | 0 9 * * 1-5 |
пн–пт |
| 1-го числа месяца | 0 0 1 * * |
ежемесячно |
Готовые примеры заданий:
# Бэкап базы каждый день в 2:30 ночи
30 2 * * * /usr/local/bin/backup.sh
# Очистка временных файлов каждое воскресенье в 4:00
0 4 * * 0 find /tmp -type f -mtime +7 -delete
# Проверка сайта каждые 10 минут
*/10 * * * * curl -s https://example.com > /dev/null
Спецстроки
Вместо пяти полей можно использовать удобные псевдонимы:
@reboot /path/script.sh # при загрузке сервера
@daily /path/script.sh # раз в сутки в полночь
@hourly /path/script.sh # раз в час
@weekly /path/script.sh # раз в неделю
Логирование и отладка
Cron не выводит результат на экран. Чтобы видеть, что происходит, перенаправляйте вывод в файл:
0 2 * * * /path/backup.sh >> /var/log/backup.log 2>&1
2>&1 направляет и ошибки, и обычный вывод в один лог.
Проверить, что cron вообще выполняет задания, можно в системном журнале:
grep CRON /var/log/syslog
Частые причины, почему задача не работает
- Относительные пути. Cron запускается в урезанном окружении. Указывайте полные пути к командам и файлам (
/usr/bin/php, а неphp). - Переменные окружения.
PATHв cron минимален. Задайте нужные переменные в начале crontab или в скрипте. - Нет прав на выполнение. Сделайте скрипт исполняемым:
chmod +x /path/script.sh. - Забыт перевод строки. Последняя строка crontab должна заканчиваться переводом строки.
Частые вопросы
Чем отличается crontab пользователя от системного?
crontab -e редактирует задачи текущего пользователя. Системные задания лежат в /etc/crontab и /etc/cron.d/, где дополнительно указывается пользователь, от имени которого выполнять команду.
Почему задача работает вручную, но не по cron?
Чаще всего из-за окружения: cron не знает ваш PATH и переменные. Используйте абсолютные пути и задавайте переменные явно в скрипте.
Как запустить задачу от имени root?
Отредактируйте crontab root командой sudo crontab -e либо добавьте задание в /etc/cron.d/ с указанием пользователя root.
Есть ли альтернатива cron? Да, systemd timers — более гибкая и логируемая альтернатива. Но cron проще и присутствует практически на любом сервере, поэтому остаётся стандартом.
Итог
Cron покрывает почти любую автоматизацию по расписанию: бэкапы, очистку, проверки. Освойте пять полей синтаксиса, всегда используйте абсолютные пути и логируйте вывод — и задачи будут выполняться стабильно.
Нужен сервер под свои задачи и скрипты? Возьмите VPS на Linux, оформите аренду VPS или закажите Администрирование серверов.
