GNU/Linux >> Linux Esercitazione >  >> Linux

Come riavviare automaticamente un processo in background di Linux se fallisce?

Buildroot ha tre possibili sistemi di init, quindi ci sono tre modi per farlo:

BusyBox init

Con questo, si aggiunge una voce a /etc/inittab .

::respawn:/bin/myprocess

Nota che BusyBox init ha un /etc/inittab idiosincratico formato. Il secondo campo non ha significato e il primo campo non è un ID ma un nome di base del dispositivo.

Linux "System V" init

Di nuovo, si aggiunge una voce a /etc/inittab .

myprocess:2345:respawn:/bin/myprocess

systemd

Uno scrive un file di unità in, diciamo, /etc/systemd/system/myprocess.service :

[Unit]
Description=My Process

[Service]
ExecStart=/bin/myprocess
Restart=always

[Install]
WantedBy=multi-user.target

Abilita questo per l'avvio automatico all'avvio con:

systemctl enable myprocess.service

Avvialo manualmente con:

systemctl start myprocess.service

Ulteriori letture

  • "3.1.3 sistema di inizializzazione". Il manuale utente di Buildroot .

Che ne dici di creare una subshell con un ciclo che chiama costantemente lo stesso processo?

Se finisce, la successiva iterazione del ciclo va avanti e lo fa ripartire.

(while true; do 
    /bin/myprocess
done) &

Se il subshell muore, però è finita. L'unica possibilità in tal caso sarebbe quella di creare un altro processo (lo chiamerò negromante) che controlli se il tuo processo è attivo, avvialo se non lo è ed esegui questo negromante con cron, in modo da poterlo controllare regolarmente.

Il prossimo passo sarebbe chiedersi cosa potrebbe succedere se cron muore, ma a un certo punto dovresti sentirti al sicuro e smettere di preoccuparti.


Il modo più semplice sarebbe aggiungerlo a /etc/inittab, che è progettato per fare questo genere di cose:

riapparire Se il processo non esiste, avviare il processo. Non attendere la sua chiusura (continua la scansione del file /etc/inittab). Riavvia il processo quando muore. Se il processo esiste, non fare nulla e continuare la scansione del file /etc/inittab.

Ad esempio, potresti fare questo:

# Run my stuff
myprocess:2345:respawn:/bin/myprocess

Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Come riavviare (o ripristinare) un processo in esecuzione in Linux?

  3. Come scrivere uno script di shell con origine automaticamente in /etc/profile?

  4. Come viene aggiornato /etc/motd?

  5. Come ottengo il percorso di un processo in Unix/Linux

Come avviare il comando Linux in background e scollegare il processo nel terminale

Come uccidere un processo in Linux

Come lavorare con il processo in primo piano e in background in Linux

Come modificare le impostazioni del fuso orario in Linux?

Come inviare processi in background su Linux

Linux /etc/security/limits.conf spiegazione