[sisyphus] Быстрая замена кронтабов на таймеры
В.А. Илларионов
gbimobou на gmail.com
Вт Окт 24 13:23:44 MSK 2017
Реализовал следующим образом.
1. Создал два шаблона - для периодических таймеров и их "целей", назвал
их doit@ - мол, "делать это еже..."
minutely ...минутно,
hourly ...часно,
daily ...дневно,
weekly ...недельно,
monhly ...месячно,
yearly ...годно.
Само собой, doit что в именах, что в шаблоне таймера и периодически
запускаемых сервисах можно заменить на do, cron, timers или что угодно.
Итак.
# cat /lib/systemd/system/doit на .target
[Unit]
Description=%i timer target
StopWhenUnneeded=yes
# cat /lib/systemd/system/doit на .timer
[Unit]
Description=%i timer
[Timer]
OnCalendar=%i
Persistent=true
# Рандомизацию пока отключил - не знаю, как оно сочетается с запуском
ежеминутных скриптов:
#RandomizedDelaySec=10min
Unit=doit@%i.target
[Install]
WantedBy=timers.target
2. Включил и запустил периодические таймеры:
for time in minute hour dai week month year; do
for act in enable start; do
systemctl $act doit@${time}ly.timer
done
done
3. Создал сервисы, требующие периодического исполнения, нужную
периодичность указав через секцию [Install]. Вот пример:
# cat /lib/systemd/system/logrotate.service
[Unit]
Description=Rotate system logs
[Service]
Nice=19
Type=simple
IOSchedulingClass=2
IOSchedulingPriority=7
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf
[Install]
WantedBy=doit на daily.target
4. И, наконец, включил их:
systemctl enable <список таких сервисов>
Собственно, готово - работает. Вот:
# systemctl list-timers
NEXT LEFT
LAST PASSED UNIT
ACTIVATES
Tue 2017-10-24 18:18:00 IRKT 32s left Tue 2017-10-24
18:17:02 IRKT 25s ago doit на minutely.timer
doit на minutely.target
Tue 2017-10-24 19:00:00 IRKT 42min left Tue 2017-10-24
18:00:12 IRKT 17min ago doit на hourly.timer doit на hourly.target
Wed 2017-10-25 00:00:00 IRKT 5h 42min left
n/a n/a doit на daily.timer
doit на daily.target
Wed 2017-10-25 15:46:49 IRKT 21h left Tue 2017-10-24
15:46:49 IRKT 2h 30min ago systemd-tmpfiles-clean.timer
systemd-tmpfiles-clean.service
Mon 2017-10-30 00:00:00 IRKT 5 days left
n/a n/a doit на weekly.timer
doit на weekly.target
Wed 2017-11-01 00:00:00 IRKT 1 weeks 0 days left
n/a n/a doit на monthly.timer
doit на monthly.target
Mon 2018-01-01 00:00:00 IRKT 2 months 7 days left
n/a n/a doit на yearly.timer
doit на yearly.target
7 timers listed.
Pass --all to see loaded but inactive timers, too.
# ls /etc/systemd/system/doit на daily.target.wants
/etc/systemd/system/doit на minutely.target.wants
/etc/systemd/system/doit на monthly.target.wants
/etc/systemd/system/doit на daily.target.wants:
logrotate.service
/etc/systemd/system/doit на minutely.target.wants:
unbound-stats.service
/etc/systemd/system/doit на monthly.target.wants:
unbound-anchor.service
--
Мимо крокодил.
WBR, rednex CIO.
Viber = +7(964)103-65-67
JID = <mailto:>
Skype = $local_part@<mailto:>
Подробная информация о списке рассылки Sisyphus