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
OnBootSec
e asOnStartupSec
directivas serão ativados se o ponto de tempo configurado está no passado. Também encontrei alguns exemplos usando uma combinação destes comOnActiveSec
para 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
OnCalendar
diretiva. 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?
Respostas:
Esse recurso já foi implementado no systemd (versão> = 212) usando a
Persistent=
diretiva, então você só precisa inserirPersistent=true
o arquivo da unidade enquanto estiver usando aOnCalendar=
diretiva para estabelecer a data / hora para executar o trabalho.fonte
OnBootSec
eOnActiveSec
.Persistent
é executar uma vez na inicialização se pelo menos uma execução foi perdida devido a estar inativa?De acordo com este email na lista de discussão systemd-devel, o comportamento desejado está no roteiro e será adicionado no futuro.
fonte