[Unit]
Description=run test service
[Timer]
OnCalendar=Sat *-*-* 00:00:01
Unit=test.service
Persistent=true
[Install]
WantedBy=timers.target
No exemplo acima, tudo funciona bem. Mas eu tenho que inicializar meu sistema Linux antes das 10 horas da manhã.
Minha meta é: Quero inicializar meu Debian 10 a qualquer hora todos os sábados e depois executar o script durante a inicialização. Se eu reiniciar minha máquina Linux duas ou três vezes no sábado (mesmo dia), não quero executar o script novamente, apenas uma vez. É possível fazer isso com o systemd?
Meu sistema operacional Gnu-Linux éDebian GNU/Linux 10 (destruidor)e systemctl --version ésistema 241 (241)
Responder1
"Linux OS" é muito genéricopara poder diagnosticar seu sistema específico. Execute os quatro comandos a seguir e relate os resultados (incluindo erros se o comando não estiver disponível). O relatório dirá qual versão do "linux os" está instalada e qual versão do systemd está sendo executada:
lsb_release -a
systemctl --version
/sbin/init --version
busctl --system get-property org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
Version
Em uma versão atual (em agosto de 2019) do systemd
Defina seu cronômetro em tempo real para ser acionado a qualquer hora no sábado
OnCalendar=Sat *-*-* 00:00:01
E remova o temporizador monolítico
OnBootSec=2
O efeito de
Persistent=true
é que o sistema tentará executar o script uma vez por semana após 00:00:01 de cada sábado. O script será executado apenas uma vez por sábado e geralmente será a primeira vez que será inicializado. Ele será executado em qualquer outro dia da semana se o sistema não estiver ligado no sábado, e será executado às 00:00:01 se o sistema tiver sido deixado na sexta-feira durante a noite.
- http://manpages.ubuntu.com/manpages/xenial/man5/systemd.timer.5.html
- https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.timer.5
Persistente =
Aceita um argumento booleano. Se for verdade, a hora em que a unidade de serviço foi acionada pela última vez será armazenada no disco. Quando o temporizador é ativado, a unidade de serviço é acionada imediatamente se tivesse sido acionada pelo menos uma vez durante o tempo em que o temporizador estava inativo. Isso é útil para acompanhar as execuções perdidas do serviço quando a máquina estava desligada. Observe que esta configuração só tem efeito em temporizadores configurados com OnCalendar=. O padrão é falso.