Таймер systemd запускается более одного раза за период, даже если persist=false

Второе поле в команде whoпоказывает консольный (терминал ), на котором зарегистрированы пользователи.

username     tty2         2017-07-16 19:05 (:0)
0
16.09.2019, 04:12
1 ответ

Persistent=false( т. е. по умолчанию )отключает функцию отлова таймеров, пропущенных во время выключения системы. В вашем случае система находится в строке -, а таймер опущен -, если OnCalendarпериод прошел (, вероятно, потому, что foo.service уже запущен ), он все еще ждет своего момента для запуска " через минуту/день после последнего запуска " -не после последней попытки/проверки/попытки запуска , что означает ровно сразу после остановки foo.service .

Это следствие, цитируяman systemd.timer:Обратите внимание, что в случае, если блок, который нужно активировать, уже активен в то время, когда истекает время таймера, он не перезапускается, а просто остается работающим . В настоящее время я не вижу прямого способа сбросить таймер, если таймер уже истек, но действие было пропущено из-за того, что служба все еще работает.

Косвенным методом может быть автоматический -перезапуск таймера, что-то вродеfoo-try_restart.serviceвызова systemctl restart foo-try_restart.timerперед попыткой systemctl start foo.service. Поскольку ваш foo.serviceотличается от этого вновь созданногоfoo-try_restart.serviceType=oneshot, безRemainAfterExit)он foo-try_restart.timerвсегда будет срабатывать, поэтому его таймер будет сбрасываться после каждого периода.

0
20.07.2020, 07:19

Теги

Похожие вопросы