systemd - Unidades de timer que imitam o comportamento anacron

13

Preciso escrever uma unidade de timer para uma máquina que é desligada com frequência (por exemplo, configuração clássica da área de trabalho). Esta unidade de timer precisa ser ativada regularmente, mas não com muita frequência (por exemplo, semanalmente, mensalmente).

Eu encontrei algumas abordagens, mas elas realmente não se encaixam:

  • De acordo com as páginas do manual apenas o OnBootSece as OnStartupSecdirectivas serão ativados se o ponto de tempo configurado está no passado. Também encontrei alguns exemplos usando uma combinação destes com OnActiveSecpara definir um evento regular. O problema é: Toda vez que a máquina é inicializada, o timer ativa a unidade configurada. Se você possui um cronômetro que deve ser executado uma vez por semana / mês com muita frequência. Por exemplo: não quero que meus logs sejam girados três vezes por dia ...

  • Soluções com a OnCalendardiretiva. Se a máquina for desligada no ponto configurado no tempo (principalmente à meia-noite, porque se você omitir a hora no horário especificado, o padrão é 00:00:00), o cronômetro não será ativado após a próxima inicialização. Pelo menos é assim que eu entendi. Isso está certo ?

Então, aqui vem a pergunta: O
cronômetro com eventos do calendário é ativado logo após a próxima inicialização, se o tempo configurado já foi passado?
Caso contrário: existe uma solução alternativa para obter esse comportamento?

mmh
fonte
Ok, eu estou ciente disso . Ainda é o caminho a percorrer? Ou existem soluções mais elegantes? Existe algo planejado para melhorar a situação atual?
mmh

Respostas:

15

Esse recurso já foi implementado no systemd (versão> = 212) usando a Persistent=diretiva, então você só precisa inserir Persistent=trueo arquivo da unidade enquanto estiver usando a OnCalendar=diretiva para estabelecer a data / hora para executar o trabalho.

Persistente =

Adota um argumento booleano. Se verdadeiro, o horário em que a unidade de serviço foi acionada pela última vez é armazenado em disco. Quando o cronômetro é ativado, a unidade de serviço é acionada imediatamente se tiver sido acionada pelo menos uma vez durante o tempo em que o cronômetro estava inativo. Isso é útil para acompanhar as execuções perdidas do serviço quando a máquina estava desligada. Observe que essa configuração afeta apenas os cronômetros configurados com OnCalendar =.

Pedro
fonte
Não é o contrário? O OP pergunta sobre a eliminação de execuções extras resultantes de ter ambos OnBootSece OnActiveSec. Persistenté executar uma vez na inicialização se pelo menos uma execução foi perdida devido a estar inativa?
X-yuri
Bem, você provavelmente quis dizer isso dessa maneira .
X-yuri
0

De acordo com este email na lista de discussão systemd-devel, o comportamento desejado está no roteiro e será adicionado no futuro.

mmh
fonte