ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [sisyphus] Быстрая замена кронтабов на таймеры
@ 2017-10-24 10:23 В.А. Илларионов
  2017-10-28  2:11 ` [sisyphus] " Вадим Илларионов
  0 siblings, 1 reply; 6+ messages in thread
From: В.А. Илларионов @ 2017-10-24 10:23 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

Реализовал следующим образом.


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:>



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [sisyphus]  Re: Быстрая замена кронтабов на таймеры
  2017-10-24 10:23 [sisyphus] Быстрая замена кронтабов на таймеры В.А. Илларионов
@ 2017-10-28  2:11 ` Вадим Илларионов
  2017-10-28  5:11   ` [sisyphus] " Anton Farygin
  0 siblings, 1 reply; 6+ messages in thread
From: Вадим Илларионов @ 2017-10-28  2:11 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

Оформил бы в вики, но, полагаю, имеет смысл как-то унифицировать для
последующего применения. Может, и впрямь doit поменять на cron или timers?
Во всяком случае, подобного решения не встречал ни в родном, ни в
иноязычных руководствах. Хотя, вроде бы, само напрашивается. Всё же
Леннарт гений - почти как Ленин :)

-- 
Мимо крокодил.
WBR, rednex CIO.
JID = <mailto:>
Skype = $local_part@<mailto:>
Viber = +7(964)103-65-67

Опции rsync -aHAX --delete мозг автоматом переводит как "удалить к чёртовой матери!"



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [sisyphus] Быстрая замена кронтабов на таймеры
  2017-10-28  2:11 ` [sisyphus] " Вадим Илларионов
@ 2017-10-28  5:11   ` Anton Farygin
  2017-11-03  8:25     ` В.А. Илларионов
  0 siblings, 1 reply; 6+ messages in thread
From: Anton Farygin @ 2017-10-28  5:11 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions,
	Вадим
	Илларионов

28.10.2017 05:11, Вадим Илларионов пишет:
> Оформил бы в вики, но, полагаю, имеет смысл как-то унифицировать для
> последующего применения. Может, и впрямь doit поменять на cron или timers?
> Во всяком случае, подобного решения не встречал ни в родном, ни в
> иноязычных руководствах. Хотя, вроде бы, само напрашивается. Всё же
> Леннарт гений - почти как Ленин :)
>
Интересное решение. Надо упакечивать



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [sisyphus] Быстрая замена кронтабов на таймеры
  2017-10-28  5:11   ` [sisyphus] " Anton Farygin
@ 2017-11-03  8:25     ` В.А. Илларионов
  2017-11-03 12:14       ` Alexey Shabalin
  0 siblings, 1 reply; 6+ messages in thread
From: В.А. Илларионов @ 2017-11-03  8:25 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

28.10.2017 13:11, Anton Farygin пишет:
> 28.10.2017 05:11, Вадим Илларионов пишет:
>> Оформил бы в вики, но, полагаю, имеет смысл как-то унифицировать для
>> последующего применения. Может, и впрямь doit поменять на cron или 
>> timers?
>> Во всяком случае, подобного решения не встречал ни в родном, ни в
>> иноязычных руководствах. Хотя, вроде бы, само напрашивается. Всё же
>> Леннарт гений - почти как Ленин :)
>>
> Интересное решение. Надо упакечивать

Со спеками я работал, но тут поскриптовать при установке надо, и что-то 
опасаюсь я.
В праздники попробую разобраться с этим.

> 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

Даже проще:

for do in enable start; do
	systemctl $do doit@${minute,hour,dai,week,month,quarter,semi-annual,year}ly.timer
done

--
Мимо крокодил.
WBR, rednex CIO.
Viber = +7(964)103-65-67
JID = <mailto:>
Skype = $local_part@<mailto:>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [sisyphus] Быстрая замена кронтабов на таймеры
  2017-11-03  8:25     ` В.А. Илларионов
@ 2017-11-03 12:14       ` Alexey Shabalin
  2017-11-06  3:58         ` Вадим Илларионов
  0 siblings, 1 reply; 6+ messages in thread
From: Alexey Shabalin @ 2017-11-03 12:14 UTC (permalink / raw)
  To: ALT Linux Sisyphus discussions

3 ноября 2017 г., 11:25 пользователь В.А. Илларионов
<gbimobou@gmail.com> написал:
> 28.10.2017 13:11, Anton Farygin пишет:
>>
>> 28.10.2017 05:11, Вадим Илларионов пишет:
>>>
>>> Оформил бы в вики, но, полагаю, имеет смысл как-то унифицировать для
>>> последующего применения. Может, и впрямь doit поменять на cron или
>>> timers?
>>> Во всяком случае, подобного решения не встречал ни в родном, ни в
>>> иноязычных руководствах. Хотя, вроде бы, само напрашивается. Всё же
>>> Леннарт гений - почти как Ленин :)
>>>
>> Интересное решение. Надо упакечивать
>
>
> Со спеками я работал, но тут поскриптовать при установке надо, и что-то
> опасаюсь я.
> В праздники попробую разобраться с этим.
>
>> 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
>
>
> Даже проще:
>
> for do in enable start; do
>         systemctl $do
> doit@${minute,hour,dai,week,month,quarter,semi-annual,year}ly.timer
> done

А вы видели вот эти проекты:
https://github.com/systemd-cron
тут собраны разные реализации генератора таймеров на основе crontab.
Так же там описаны таймеры:
boot,
hourly,
daily,
weekly,
monthly,
yearly,
minutely,
quarterly,
semi-annually

В планах есть упаковать, как замену cron. Но руки все не доходят.
Нарисовал таймер для logrotate, и отключил crond у себя.
Больше никаких заданий в кроне нет, поэтому и успокоился :)

-- 
Alexey Shabalin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [sisyphus] Быстрая замена кронтабов на таймеры
  2017-11-03 12:14       ` Alexey Shabalin
@ 2017-11-06  3:58         ` Вадим Илларионов
  0 siblings, 0 replies; 6+ messages in thread
From: Вадим Илларионов @ 2017-11-06  3:58 UTC (permalink / raw)
  To: sisyphus

03.11.2017 20:14, Alexey Shabalin пишет:
> 3 ноября 2017 г., 11:25 пользователь В.А. Илларионов
> <gbimobou@gmail.com> написал:
>> 28.10.2017 13:11, Anton Farygin пишет:
>>>> Во всяком случае, подобного решения не встречал ни в родном, ни в
>>>> иноязычных руководствах. Хотя, вроде бы, само напрашивается. Всё же
>>>> Леннарт гений - почти как Ленин :)
>>>>
>>> Интересное решение. Надо упакечивать
>>
>> Со спеками я работал, но тут поскриптовать при установке надо, и что-то опасаюсь я.
>> В праздники попробую разобраться с этим.
>> for do in enable start; do
>>     systemctl $do doit@${minute,hour,dai,week,month,quarter,semi-annual,year}ly.timer
>> done
> А вы видели вот эти проекты:
> https://github.com/systemd-cron
> тут собраны разные реализации генератора таймеров на основе crontab.

Как-то всё несколько выморочно, излишне наворочено. Ведь всё необходимое
уже наличествует в systemd, достаточно всего-то:
а) пары шаблонов - один для таймеров, другой для таргетов к этим таймерам;
б) включить/запустить надобные таймеры по оным шаблонам;
в) создать service-файлы с указанием таргета требуемой периодичности в
секции [Install] - а без этого никак  при любой реализации
(автогенератору таковых на основе кронтаб-скриптов сам Леннарт, вон, дал
отлуп:
https://lists.freedesktop.org/archives/systemd-devel/2013-September/013120.html).

> Так же там описаны таймеры:
> boot,
> hourly,
> daily,
> weekly,
> monthly,
> yearly,
> minutely,
> quarterly,
> semi-annually

Ну, они много где описаны. Суть одна - исполнять еже<...>но, без
указания сложных конструкций из даты:времени/периодичности (собственно,
именно то, чем занимается /etc/cron.<...>ly/, плюс не охваченные этим
способом ежеминутные, ежеквартальные и ежесеместровые запуски).
А для сложных конструкций в замену /etc/cron.d приходится, конечно,
создавать отдельные таймеры. Причём, в некоторых ситуациях таймер,
похоже, справится там, где крон надо костылём подпирать - например:

# By default, run at 00:57 on every Sunday, but do nothing unless the
day of the month is less than or equal to 7. Thus, only run on the first
Sunday of each month.
# crontab(5) sucks, unfortunately, in this regard; therefore this hack
(see #380425).
57 0 * * 0 root [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le
7 ] && /usr/share/mdadm/checkarray --cron --all --idle --quiet

Не уверен, но нюхом чую - можно такое условие таймером обрисовать. :)

> В планах есть упаковать, как замену cron. Но руки все не доходят.
> Нарисовал таймер для logrotate, и отключил crond у себя.
> Больше никаких заданий в кроне нет, поэтому и успокоился :)

Я же пока плохо представляю, как состряпать спек для пары шаблонов и
скрипта установки/удаления такого, с позволения сказать, "пакета". А
после некоторым мейнтейнерам потребуется включать в свои пакеты помимо
кронтабов ещё и сервисы к периодичным задачам (logrotate тот же) с
учётом оного новшества - то есть, сперва этот мой предполагаемый "пакет"
железно должен быть принят в альтовские дистрибутивы.

-- 
Мимо крокодил.
WBR, rednex CIO.
JID = <mailto:>
Skype = $local_part@<mailto:>
Viber = +7(964)103-65-67

Опции rsync -aHAX --delete мозг автоматом переводит как "удалить к чёртовой матери!"



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-11-06  3:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-24 10:23 [sisyphus] Быстрая замена кронтабов на таймеры В.А. Илларионов
2017-10-28  2:11 ` [sisyphus] " Вадим Илларионов
2017-10-28  5:11   ` [sisyphus] " Anton Farygin
2017-11-03  8:25     ` В.А. Илларионов
2017-11-03 12:14       ` Alexey Shabalin
2017-11-06  3:58         ` Вадим Илларионов

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git