GNU/Linux >> Linux Esercitazione >  >> Linux

Come riavviare automaticamente un servizio in caso di errore in Linux

Soluzione 1:

Solo rispondendo alla parte di riavvio del servizio. Mi sono imbattuto anche in Monit, ma su CentOS 7 systemd si occupa di tutto questo per te. Devi solo aggiungere queste due righe al file .service (se non ci sono già):

Restart=always
RestartSec=3

Vedere https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ per riferimento.

Se vuoi creare un servizio systemd personalizzato, è abbastanza semplice scrivere il tuo file di servizio. Guarda l'esempio qui sotto, per un server http personalizzato.

Avvia l'editor con un nuovo file di servizio:

vim /etc/systemd/system/httpd.service

E aggiungi il seguente contenuto, che puoi modificare come richiesto:

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Voglio che si avvii automaticamente all'avvio:

systemctl enable httpd

Comunica a systemd le modifiche e avvia il servizio:

systemctl daemon-reload
systemctl start httpd

E ora puoi vedere lo stato:

systemctl status httpd

Per riferimento, vedere https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/

Soluzione 2:

monit è un ottimo modo per monitorare e riavviare i servizi quando falliscono e probabilmente finirai per usarlo per altri servizi essenziali (come Apache). C'è un bell'articolo su nixCraft che descrive in dettaglio come usarlo per i servizi in particolare, anche se monit stesso ha molte altre funzioni oltre a questo.

Per quanto riguarda l'aspetto del socket, @galraen ha risposto a questo punto.

Soluzione 3:

Puoi chiamare setsockopt(2) per presa di ascolto con SO_REUSEADDR , quindi sarai in grado di bind(2) nuovamente senza attendere la scadenza di tutte le connessioni. Un'altra possibilità:eliminare le connessioni dal kernel. FreeBSD ha tcpdrop comando per questo, non conosco Linux.

Soluzione 4:

Se la tua distribuzione Linux usa Upstart invece di SysV init, allora il respawn parola chiave fa questo.

http://upstart.ubuntu.com/cookbook/#respawn


Linux
  1. Come creare un servizio Systemd in Linux

  2. Come utilizzare il watchdog del software Linux?

  3. Come riavviare il server MySQL remoto in esecuzione su Ubuntu Linux?

  4. Come si pianifica un riavvio su Linux?

  5. Come documentare la configurazione del server Linux?

Come riavviare i servizi di rete in Linux

Come riavviare il Bluetooth in Ubuntu 20.04

Come riavviare un servizio tramite systemctl sotto Linux

Come usare systemctl in Linux

Come svuotare la cache DNS su Linux?

Come avviare, arrestare o riavviare i servizi di rete su Rocky Linux 8