A unidade do temporizador systemd pula a próxima execução se o processo ainda não foi concluído?

10

Eu quero usar o systemd para executar um comando a cada 5 minutos. No entanto, existe o risco de que, ocasionalmente, a tarefa demore mais de 5 minutos para ser executada. Nesse ponto, o systemd iniciará uma segunda instância do comando, ou seja, terminarei com 2 processos em execução?

É possível dizer ao systemd para não iniciar um segundo processo se o primeiro não tiver sido concluído? Se não, quais são algumas boas soluções?

Nota: Espero que a resposta seja "Esse é o comportamento padrão. Simplesmente não está documentado". Se esta é a situação, alguém pode me dizer como registrar um bug contra seus documentos?

Observação: o Cron tem um problema semelhante, discutido no link . Estou procurando o equivalente ao systemd.

    
por TomOnTime 13.05.2015 / 22:47

1 resposta

16

Este é o comportamento padrão (e o único). Não é explicitamente documentado, mas está implícito na lógica de operação do systemd.

systemd.timer (5) diz:

For each timer file, a matching unit file must exist, describing the unit to activate when the timer elapses.

systemd (1) , por sua vez, descreve o conceito de estados unitários e transições entre eles:

Units may be "active" (meaning started, bound, plugged in, ..., depending on the unit type, see below), or "inactive" (meaning stopped, unbound, unplugged, ...), as well as in the process of being activated or deactivated, i.e. between the two states (these states are called "activating", "deactivating").

Isso significa que o acionamento de um timer leva à "ativação" da unidade correspondente, i. e. sua transição para o estado "ativo".

Se a unidade correspondente já estiver "ativa" no momento da "ativação" (para uma unidade de serviço, isso significa que "o processo principal ainda está em execução", a menos que a unidade de serviço tenha Type=oneshot e RemainAfterExit=true ) deve ser óbvio que nenhuma ação será tomada.

    
por 13.05.2015 / 23:23

Tags