Как это считается
Строка crontab начинается с пяти полей, разделённых пробелами, за которыми следует команда. Cron проверяет их каждую минуту и запускает команду, когда совпадают минута, час, день месяца, месяц и день недели.
┌─ Минута │ ┌─ Час │ │ ┌─ День месяца │ │ │ ┌─ Месяц │ │ │ │ ┌─ День недели * * * * * /path/to/command
Два поля дней сочетаются так, что многих это удивляет: если ограничены оба, задание запускается, когда совпадает любое из них. 0 0 13 * 5 запускается и каждого 13-го числа, и каждую пятницу, а не только в пятницу 13-го. Если одно из двух начинается с *, должны совпасть оба.
Пять полей
| Поле | Допустимые значения |
|---|---|
| Минута | 0–59 |
| Час | 0–23 |
| День месяца | 1–31 |
| Месяц | 1–12 или JAN–DEC |
| День недели | 0–7 или SUN–SAT (0 и 7 — воскресенье) |
Специальные символы
- * соответствует любому значению поля.
- , перечисляет значения: 1,15 — это 1-е и 15-е.
- - задаёт диапазон: 1-5 в поле дня недели — с понедельника по пятницу.
- / задаёт шаг: */10 — каждое десятое значение, 5/10 — каждое десятое, начиная с 5, 9-17/2 — каждый второй час с 9 до 17.
- @hourly, @daily, @weekly, @monthly и @yearly заменяют все пять полей; @reboot запускается один раз при старте сервера.
Пример
30 2 * * 1-5 запускается в 02:30 с понедельника по пятницу: минута 30, час 2, любой день месяца, любой месяц и дни недели с 1 по 5. Записанная в crontab как 30 2 * * 1-5 /usr/local/bin/backup.sh, она запускает резервное копирование каждую рабочую ночь.
Вопросы
Что означает */5 в cron?
Каждое пятое значение поля. В поле минут */5 запускает задание в минуты 0, 5, 10 и так далее до 55: каждые пять минут. */15 — каждые четверть часа, а */2 в поле часов — каждый второй час, начиная с полуночи.
Как добавить задание cron на сервере Linux?
Выполните crontab -e от имени пользователя, под которым должно работать задание, добавьте одну строку с пятью полями и командой, затем сохраните и закройте редактор. crontab -l показывает задания, а общесистемные задания записываются в файл в /etc/cron.d с именем пользователя после пяти полей.
Какой часовой пояс использует cron?
Часовой пояс самого сервера, на VPS обычно UTC. 0 3 * * * на сервере с UTC запускается в 04:00 по Берлину зимой и в 05:00 летом. Некоторые реализации cron, например cronie, принимают строку CRON_TZ= над заданиями; иначе пересчитывайте время сами.
Что выбрать: cron или таймер systemd?
Cron проще и работает везде. Таймеру systemd нужны два небольших файла, но он записывает каждый запуск в журнал, может нагнать запуски, пропущенные, пока сервер был выключен (Persistent=true), и не даёт двум копиям одного задания работать одновременно.