Вики / Службы и systemd
cron и systemd timers
Запуск задач по расписанию — классический cron и современные systemd-таймеры.
Две системы запуска по расписанию:
- cron — классика, простой формат, на пользователя;
- systemd timers — гибче (зависимости, журнал,
OnCalendar, persistent), интегрировано в systemd.
Для новых задач на серверах часто предпочтительны таймеры; cron — когда нужно быстро и привычно.
Формат строки crontab — пять полей времени + команда:
┌── минута (0-59)
│ ┌── час (0-23)
│ │ ┌── день месяца (1-31)
│ │ │ ┌── месяц (1-12)
│ │ │ │ ┌── день недели (0-7, 0 и 7 = вс)
│ │ │ │ │
* * * * * command
crontab -e # редактировать crontab пользователя
crontab -l # показать
*/15 * * * * /usr/local/bin/backup.sh # каждые 15 минут
0 3 * * * /usr/local/bin/nightly.sh # ежедневно в 03:00
Системные cron — в /etc/cron.d/, /etc/crontab, /etc/cron.{daily,weekly}.
Пара файлов: .service (что делать) + .timer (когда).
# backup.timer
[Unit]
Description=Nightly backup
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable --now backup.timer
systemctl list-timers # все таймеры и время следующего запуска
journalctl -u backup.service # лог выполнения задачи
cron-задача не выполняется
- У cron скудный $PATH и нет вашего окружения — указывай абсолютные пути.
- Логи:
journalctl -u cronили/var/log/syslog | grep CRON. - Каждая строка должна заканчиваться переводом строки;
%нужно экранировать.
Таймер не сработал, пока машина была выключена
Добавь Persistent=true — выполнит пропущенный запуск после включения.
Не знаю, когда следующий запуск
systemctl list-timers --all.
crontab -e # моя crontab
*/15 * * * * cmd # каждые 15 минут
systemctl list-timers # systemd-таймеры
journalctl -u NAME.service # лог задачи
См. также
- journalctl — Логи и аудит
- systemd — Службы и systemd