timer systemd a cada 15 minutos

33

Estou tentando criar um timer systemd que é executado a cada 15 minutos. Agora eu tenho:

  • 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
    

Isso é executado repetidamente sem parar. Precisa ser em *:0,15,30,45:*vez disso? Como posso fazer isso funcionar?

Lily Hahn
fonte
2
Sua sintaxe não significa a cada 15 segundos ?
Pavel Šimerda

Respostas:

43

Sua sintaxe se traduz a cada 15 segundos ; se você desejar a cada 15 minutos , o IMO da maneira mais legível é:

OnCalendar=*:0/15

Uma resposta mais semelhante à que você usa na sua pergunta é:

OnCalendar=*:0,15,30,45

Mais Informações:

Pavel Šimerda
fonte
3
OnCalendar=0/8:00:00está correto ao dizer "executar a cada 8 horas"?
shackra
4
Sim. Mas você provavelmente já sabe disso agora. :)
Pavel Šimerda
Eu não fiz, mas eu usei isso de qualquer maneira lol. Obrigado por confirmar!
shackra 7/01/16
OnCalendar=*:0/15deve ser traduzido OnCalendar=*:0,15,30,45exatamente (dado que li corretamente nos documentos). A cada 8 horas seria realizado com OnUnitActiveSec=8hours.
Debilski
3
Ao especificar um intervalo, a saída de systemd-analyzepode ser útil, por exemplo, tente systemd-analyze calendar *:0/15.
sebastian
12

De acordo com o systemd.time , a configuração

OnCalendar=*:0/15

traduz exatamente para

OnCalendar=*:0,15,30,45

ie ativa a unidade exatamente a toda a hora, bem como às quinze e quinze, quinze e quinze para a.

Dependendo do seu serviço, pode não ser o que você deseja nem o que precisa em todos os casos.

Um cronômetro que é executado a cada 15 minutos - por exemplo, 1:02, 1:17, 1:32, 1:47, 2:02, ... - sempre dependendo da hora da última execução - pode ser realizado com o systemd. configuração do temporizador

OnUnitActiveSec=15min

Agora, você também desejará que a unidade inicie algum tempo após a inicialização (a menos que deseje ativar a unidade manualmente ou ter uma dependência que o faça), portanto, talvez você deva especificar

OnBootSec=10min
OnUnitActiveSec=15min

para iniciar a unidade 10 minutos após a inicialização e a cada 15 minutos após a primeira vez.

Além disso, existe a configuração OnUnitInactiveSecque começa a contar o tempo após a interrupção do serviço (ou, mais geralmente, a unidade foi desativada).

Debilski
fonte
1
Aviso: OnUnitActiveSec parece estar bem quebrado .
Anders Kaseorg 24/01