Estou tentando configurar um cronômetro systemd para executar duas vezes por dia durante uma semana de trabalho. Uma vez é às 7h00 e uma vez às 13h00. Os arquivos *.timer e *.service estão abaixo.
Eu os instalo e habilito, e está tudo OK:
cp callboot-update.service /etc/systemd/system
cp callboot-update.timer /etc/systemd/system
if ! systemctl enable callboot-update.service; then
echo "Failed to enable callboot-update.service"
exit 1
fi
if ! systemctl enable callboot-update.timer; then
echo "Failed to enable callboot-update.timer"
exit 1
fi
E recarregue o daemon. Mais uma vez está tudo bem:
if ! systemctl daemon-reload; then
echo "Failed to daemon-reload"
fi
if ! systemctl reset-failed; then
echo "Failed to reset-failed"
fi
No entanto, verificar o status mostra que o cronômetro está no status n/a e não está programado para ser executado:
$ systemctl list-timers --all
NEXT LEFT LAST PASSED UNIT ACTIVATES
Wed 2019-12-25 03:02:08 EST 6h left Tue 2019-12-24 03:02:05 EST 17h ago system-update.timer system-update.service
Wed 2019-12-25 04:02:07 EST 7h left Tue 2019-12-24 04:09:05 EST 16h ago auto-update.timer auto-update.service
Wed 2019-12-25 06:46:46 EST 9h left Tue 2019-12-24 06:39:05 EST 14h ago apt-daily-upgrade.timer apt-daily-upgrade.service
Wed 2019-12-25 06:50:27 EST 9h left Tue 2019-12-24 18:30:05 EST 2h 23min ago apt-daily.timer apt-daily.service
Wed 2019-12-25 10:55:43 EST 14h left Tue 2019-12-24 13:22:24 EST 7h ago motd-news.timer motd-news.service
Wed 2019-12-25 16:46:06 EST 19h left Tue 2019-12-24 16:46:06 EST 4h 7min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2019-12-30 00:00:00 EST 5 days left Mon 2019-12-23 00:00:11 EST 1 day 20h ago fstrim.timer fstrim.service
n/a n/a n/a n/a callboot-update.timer callboot-update.service
Como faço para tirar o cronômetro do status n/a para que ele comece a funcionar conforme o esperado?
$ ls -Al /etc/systemd/system/callboot-*
-rw-r--r-- 1 root root 234 Dec 24 20:38 /etc/systemd/system/callboot-update.service
-rw-r--r-- 1 root root 222 Dec 24 20:38 /etc/systemd/system/callboot-update.timer
$ cat callboot-update.timer
[Unit]
Description=Run Callboot update.service
[Timer]
OnCalendar=Mon..Fri *-*-* 07:00:00
OnCalendar=Mon..Fri *-*-* 13:00:00
RandomizedDelaySec=3000
Persistent=true
[Install]
WantedBy=timers.target
$ cat callboot-update.service
[Unit]
Description=Update Callboot without user prompts
[Service]
Type=oneshot
ExecStart=/usr/sbin/callboot-update
[Install]
WantedBy=multi-user.target
Você deve iniciar a unidade .timer para agendá-la – assim como você deve iniciar as unidades .service para fazer o daemon associado ser executado. Sua postagem não mostra nem
systemctl start
, nemsystemctl enable --now
, nem quaisquer outros comandos que enfileirariam um trabalho inicial.systemctl daemon-reload
não iniciará automaticamente quaisquer dependências recém-adicionadas para unidades que já estão em execução (como timers.target neste caso) – o link simbólico que 'systemctl enable' criado só terá efeito na próxima inicialização ou se você reiniciar manualmente os temporizadores. alvo.Eu tive esse problema e notei que o serviço correspondente estava travando e seu status era
activating (start)
. Por este motivo não foi acionado.Interrompi o serviço e, em seguida, o cronômetro mostrou o próximo tempo de disparo conforme o esperado. Talvez algumas pessoas dizendo que uma reinicialização os ajudou realmente tiveram o mesmo problema.