GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso configurare un servizio systemd per il riavvio periodico?

Ho visto una soluzione qui che sembrava elegante, anche se un po' indiretta. L'idea chiave è creare un servizio one-shot attivato da un timer che ne riavvia un altro servizio.

Per il timer:

[Unit]
Description=Do something daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Per il servizio one-shot:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart my_program.service

Per il servizio one-shot su Ubuntu 16.04 LTS:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart my_program.service

Questa soluzione ti consente di sfruttare i timer di systemd, inclusa la possibilità di riavviare il servizio a una determinata ora del giorno e non solo dopo che è trascorso un certo periodo di tempo.


Per la versione di systemd>=229, c'è un'opzione chiamata RuntimeMaxSec , che termina il servizio dopo che è rimasto in esecuzione per un determinato periodo di tempo.

per esempio. Per riavviare ogni 7 giorni:

[Service]
Restart=always
RuntimeMaxSec=7d

A me questo sembra più elegante che abusare di Type=notify e WatchdogSec .

systemd fornisce un modo pulito per aggiungere e sovrascrivere le direttive nei file unit systemd forniti dai fornitori. Le unità drop-in sono descritte in man systemd.unit. Ad esempio, se volessi riavviare periodicamente il servizio foo fornito da un pacchetto, dovresti creare un file chiamato /etc/systemd/system/foo.service.d/periodic-restart.conf . Il contenuto sarebbe come mostrato sopra. Quindi:

 systemctl daemon-reload
 systemctl restart foo

Puoi confermare che l'unità Drop-In è stata caricata perché verrà segnalata nell'output di stato:

 systemctl status

Infine, puoi confermare che la direttiva è stata inclusa cercando systemctl show uscita:

 systemctl show foo.service | grep RuntimeMax

La direttiva riportata da systemctl show sarà "RuntimeMaxUSec`


Linux
  1. Come gestire i servizi Systemd con Systemctl su Linux

  2. Come installare e configurare Dovecot

  3. Come utilizzare il comando Systemctl per gestire i servizi Systemd

  4. Come creare un servizio Systemd in Linux

  5. Come utilizzare Systemd per riavviare un servizio in caso di inattività?

Come avviare, arrestare o riavviare Nginx

Comandi Systemctl per gestire il servizio Systemd

Come avviare, arrestare o riavviare i servizi in CentOS 8

Come riavviare un servizio tramite systemctl sotto Linux

Come riavviare i servizi sulla riga di comando di Ubuntu

Come usare systemctl in Linux