Таймер активирует полноценный
.service. Каждый запуск попадает в journald, получает свой cgroup, лимиты по памяти и CPU, а также зависимости — задачу можно привязать к готовности сети или базы. ➡️ Пример
/etc/systemd/system/backup.service:
[Unit]
Description=Backup job
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
/etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
Включается таймер, а не сервис.
➡️ Расписание
Календарное, через
OnCalendar= — формат DayOfWeek Year-Month-Day Hour:Minute:Second:—
*-*-* 03:00:00 — ежедневно в 3 ночи—
Mon..Fri 09:00 — по будням—
*:0/15 — каждые 15 минут—
daily, weekly, hourly — сокращения➡️ Монотонное, от событий
—
OnBootSec= — через N после загрузки—
OnUnitActiveSec= — через N после прошлого запускаСвязка
OnBootSec=5min + OnUnitActiveSec=1h даёт запуск через пять минут после старта и дальше каждый час.➡️ Полезные директивы
—
Persistent=true — пропущенный запуск (машина была выключена) отработает после загрузки. В cron такого нет—
RandomizedDelaySec=300 — случайный разброс, спасает от одновременного старта на сотне нод—
AccuracySec=1s — точность, по умолчанию минута—
Unit= — запустить юнит с другим именемДля разовой мелочи cron по-прежнему быстрее.
Там, где нужны логи, лимиты ресурсов и порядок запуска, таймеры выигрывают.
#линуксятина
