Расписания cron лежат в двух местах: в личных таблицах пользователей и в системных файлах. Строка в них устроена почти одинаково.
cron — служба, которая раз в минуту сверяет часы с расписаниями и запускает подошедшие задания. Строка расписания — пять полей времени и команда:
| Поле | Значения |
|---|---|
| минута | 0–59 |
| час | 0–23 |
| день месяца | 1–31 |
| месяц | 1–12 |
| день недели | 0–7, 0 и 7 — воскресенье |
* в поле — любое значение, */10 — каждое десятое, 1-5 — диапазон, 1,15 — список. 15 2 * * * — каждый день в 02:15, * * * * * — каждую минуту.
Личная таблица — crontab пользователя: crontab -l печатает её, crontab -e открывает в редакторе (в первый раз спросит, каким: 1 — nano). Команды из неё выполняются от владельца таблицы. В системных файлах /etc/crontab и /etc/cron.d/* между временем и командой стоит ещё поле — имя пользователя, от которого запускать.
Эту строку из /etc/cron.d скопировали как есть в свою таблицу через crontab -e. Что будет в 02:15?
15 2 * * * student /usr/local/bin/backup.sh
-
crontabпроверяет формат времени, а слово после него считает началом команды. Строка с пятью полями и командой для него правильная. -
В личной таблице после пяти полей сразу идёт команда. cron выполнит
student /usr/local/bin/backup.sh, и оболочка будет искать программуstudent.
Поле пользователя есть в /etc/crontab и /etc/cron.d, а в личной таблице на его месте начинается команда. Ошибку cron выбросит вместе с выводом, а запуск будет виден в sudo journalctl -u cron.
Главное в шаге
-
Строка cron — пять полей времени и команда;
*значит «любое». -
Личная таблица —
crontab -lиcrontab -e, команды выполняются от её владельца. -
В
/etc/crontabи/etc/cron.dпосле времени стоит имя пользователя.