Como configurar o Systemd Timer para executar o serviço no último dia do mês

2

Eu quero executar um arquivo de serviço no último dia de cada mês. Como configurar isso? Estou me referindo aos Systemd.timers mas não consegui encontre a abordagem correta.

Além disso, será possível adicionar outra configuração para ser executada no último dia útil do mês também? (dias além do sol e sentou)

    
por Dinesh P.R. 29.08.2016 / 08:44

2 respostas

5

A partir da versão 233, o systemd suporta o uso de "~" em sua sintaxe de calendário para especificar datas relativas ao final do mês.

OnCalendar=*-02~03 significa o terceiro último dia de fevereiro (26 ou 27, dependendo do ano bissexto ou não)

Mon *-05~07/1 e Mon *-05~01..07 são sinônimos para a última segunda-feira de maio.

link

    
por 10.03.2017 / 03:49
1

A solução mais simples é provavelmente usar um cronômetro que é executado todos os dias e verifica se amanhã é o primeiro dia do mês. Algo como:

mytimer.timer:

[Unit]
Description=run mytimer.service daily at 6am
[Timer]
OnCalendar=6:00
Persistent=true
[Install]
WantedBy=timers.target

mytimer.service:

[Unit]
Wants=mytimer.timer
Description=run on last day of month
[Service]
Type=oneshot
ExecStart=/bin/bash -c '[ $(date --date=tomorrow +%d) -eq 1 ] && \
                        /bin/myscript'

Para o último dia útil do mês, eu o calculo como: procure 3 dias no futuro e verifique se a data é a 3ª e o dia é de quinta a segunda inclusive, ou a data é a 1ª ou 2ª e o dia é segunda-feira. O teste bash equivalente usando data e% w para o dia da semana (0 = domingo) seria

[[ $(date --date=+3days +%d%w) =~ 03[45601]|011|021 ]]
    
por 29.08.2016 / 10:37