системний таймер кожні 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, ... - завжди залежно від часу останнього запуску - може бути виконаний із системою . налаштування таймера

OnUnitActiveSec=15min

Тепер ви також хочете, щоб пристрій запустився через деякий час після завантаження (якщо ви не хочете активувати пристрій вручну або не маєте залежності, яка це робить), тому, можливо, вам слід вказати

OnBootSec=10min
OnUnitActiveSec=15min

запускати пристрій через 10 хвилин після завантаження, а потім кожні 15 хвилин після цього першого разу.

Крім того, є параметр , OnUnitInactiveSecякий починає відлік часу після того, як послуга зупинилася (або, в більш загальному випадку , блоці інактивований).


1
Попередження: OnUnitActiveSec начебто досить зламане .
Anders Kaseorg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.