системный таймер каждые 15 минут

33

Я пытаюсь сделать системный таймер, который запускается каждые 15 минут. Прямо сейчас у меня есть:

  • timer-fifteen.timer:

    [Unit]
    Description=15min timer
    
    [Timer]
    OnBootSec=0min
    OnCalendar=*:*:0,15,30,45
    Unit=timer-fifteen.target
    
    [Install]
    WantedBy=basic.target  
    
  • timer-fifteen.target:

    [Unit]
    Description=15min Timer Target
    StopWhenUnneeded=yes
    

Это работает снова и снова без остановки. Это должно быть *:0,15,30,45:*вместо этого? Как я могу сделать эту работу?

Лили Хан
источник
2
Разве ваш синтаксис не означает каждые 15 секунд ?
Павел Шимерда

Ответы:

43

Ваш синтаксис переводится каждые 15 секунд , если вы хотите каждые 15 минут , IMO наиболее читаемый способ:

OnCalendar=*:0/15

Ответ, наиболее похожий на то, что вы используете в своем вопросе:

OnCalendar=*:0,15,30,45

Больше информации:

Павел Шимерда
источник
3
OnCalendar=0/8:00:00правильно говорить "бегать каждые 8 ​​часов"?
Шакра
4
Да. Но вы, наверное, уже знаете это сейчас. :)
Павел Шимерда
Я не сделал, но я все равно использовал это, лол. Спасибо за подтверждение!
Шакра
OnCalendar=*:0/15следует перевести OnCalendar=*:0,15,30,45точно (учитывая, что я правильно прочитал это в документации). Каждые 8 ​​часов будут реализованы с OnUnitActiveSec=8hours.
Дебильски
3
При указании интервала вывод данных systemd-analyzeможет пригодиться, например, попытаться systemd-analyze calendar *:0/15.
Себастьян
12

Согласно systemd.time , настройка

OnCalendar=*:0/15

переводит именно на

OnCalendar=*:0,15,30,45

то есть. он активирует юнит ровно в полный час, а также в четверть, полвторого и без четверти.

В зависимости от вашего обслуживания, это может быть не то, что вы хотите, ни то, что вам нужно во всех случаях.

Таймер, который запускается каждые 15 минут - например, в 1:02, 1:17, 1:32, 1:47, 2:02,… - всегда в зависимости от времени его последнего запуска - может быть выполнен с помощью systemd. настройка таймера

OnUnitActiveSec=15min

Теперь вы также захотите, чтобы модуль запускался через некоторое время после загрузки (если вы не хотите активировать модуль вручную или у вас есть зависимость, которая делает это), поэтому вам следует указать

OnBootSec=10min
OnUnitActiveSec=15min

чтобы устройство запускалось через 10 минут после загрузки, а затем каждые 15 минут после этого первого раза.

Кроме того, есть настройка, OnUnitInactiveSecкоторая начинает отсчет времени после остановки службы (или, в более общем случае, устройство деактивировалось).

Debilski
источник
1
Предупреждение: OnUnitActiveSec кажется, довольно сломан .
Андерс Касеорг