Помогите с timer'ом

$ man systemd.time
Examples
2 h
2hours
48hr
1y 12month
55s500ms
300ms20s 5day
как то так...
Ошибки в тексте-неповторимый стиль автора©
indeviral, нет. При "OnCalendar=Sat" будет стартовать каждую субботу.
По ТЗ нужна не третья суббота, а _каждая_третья. ;)
такие дела.
cucullus
При "OnCalendar=Sat" будет стартовать каждую субботу.
Да, согласен. Не нужно использовать директиву OnCalendar - нужно использовать другие директивы.
OnUnitActiveSec - определяет таймер относительно момента когда таймер был активен последний раз.
Насколько я понимаю, директива OnUnitActiveSec, означает, что таймер будет срабатывать автоматически через интервал времени, указанный в этой директиве (например, каждую 3 неделю), начиная с момента активации таймера).
UPD - OnUnitActiveSec - это так называемый неточный таймер, а директива OnCalendar является точным таймером и определяет время и дату его срабатывания (например, Sut, 18:00)
Но прописывать дерективу OnUnitActiveSec нужно следующим способом
[Timer]
OnBootSec=10min
OnUnitActiveSec=3w
То есть таймер запустится через 10 минут после загрузки, а затем снова будет запускаться каждую 3-ю неделю во время работы системы (отсчет начнется после его 1-ой активации).
Возможно, что я не правильно понял. Похоже чтобы прояснить, придется экпериментировать.
Ошибки не исчезают с опытом - они просто умнеют
cucullus
indeviral, нет. При "OnCalendar=Sat" будет стартовать каждую субботу.
Неспорю, возможно. Но вы каким образом проверяли??
Опишу свою вчерашнюю проверку, выставил в OnCalendar только время 19:40. В OnUnitActiveSec установил 3w.
И запустил, логично таймер первый раз пустился в 19.40 ну это понятно затем от этого времени отсчитало 3w и в list-timers следующее его срабатывание было в среду(т.к. вчера была среда) через три недели, а не в 19.40 на след день.
Вприципе в мане написано так же.
И с чего вы взяли что оно будет каждую субботу запускаться?
cucullus
По ТЗ нужна не третья суббота, а _каждая_третья. ;)
OnUnitActiveSec=3w это как раз три недели от дня запуска, это и будет каждая третья.
Ошибки в тексте-неповторимый стиль автора©
vasek
директива OnUnitActiveSec, означает, что таймер будет срабатывать автоматически через интервал времени, указанный в этой директиве (например, каждую 3 неделю), начиная с момента активации таймера).
Всё верно, активация как раз таки и выполняется по OnCalendar, а потом срабатывает OnUnitActiveSec и работает до упора (это я так думаю...)
Ошибки в тексте-неповторимый стиль автора©
indeviral
активация как раз таки и выполняется по OnCalendar, а потом срабатывает OnUnitActiveSec
Вот здесь я не очень уловил описание, а потому не четко понимаю.
По существу вроде бы так оно и должно быть, но в нескольких местах встречал использование с директивой OnUnitActiveSec директивы OnBootSec.
С другой стороны директивы OnBootSec и OnCalendar в принципе одного типа, а значит можно использовать любую из них.
Вообщем нужно экспериментировать.
Ошибки не исчезают с опытом - они просто умнеют
indeviral
Всё верно, активация как раз таки и выполняется по OnCalendar, а потом срабатывает OnUnitActiveSec и работает до упора (это я так думаю…)
нет. будут работать оба условия вместе. логическое ИЛИ.
такие дела.
cucullus
нет. будут работать оба условия вместе. логическое ИЛИ.
А если использовать OnBootSec ?
Ошибки не исчезают с опытом - они просто умнеют
indeviral
Опишу свою вчерашнюю проверку, выставил в OnCalendar только время 19:40. В OnUnitActiveSec установил 3w.И запустил, логично таймер первый раз пустился в 19.40 ну это понятно затем от этого времени отсчитало 3w и в list-timers следующее его срабатывание было в среду(т.к. вчера была среда) через три недели, а не в 19.40 на след день.Вприципе в мане написано так же.И с чего вы взяли что оно будет каждую субботу запускаться?

Вот только что проверил:
[Unit]
Description=Run periodic raid volume scrub

[Timer]
#OnCalendar=Sat *-*-1..7 04:00
OnCalendar=Thu 19:10
OnUnitActiveSec=3w
Persistent=true

[Install]
WantedBy=timers.target

Thu 2018-12-06 19:10:00 MSK  6 days left   Thu 2018-11-29 19:10:11 MSK  9min ago     raid-check.timer             raid-check.service
такие дела.
cucullus
да мой косяк, магнитные бури наверно)

cucullus
Включаем комп. Запуск в ближайшую субботу и далее каждые 3 недели.
(считаем, что комп работает 24/7)
должно прокатить:
# systemd-run --on-calendar 'sat' --unit=sat systemctl start test.timer
$ cat test.timer
*
OnUnitActiveSec=3w
*
$ cat test.service
*
ExecPre=systemctl stop sat
*
Ошибки в тексте-неповторимый стиль автора©
 
Зарегистрироваться или войдите чтобы оставить сообщение.