Stavo aiutando un collega che stava avendo problemi con un processo in background che moriva a intermittenza.
Ho scoperto che stavano iniziando il processo in background accedendo al server ed eseguendo:
su - <user> -c '<command>' &
"Aha", ho esclamato. "Se avvii un comando con" & "si bloccherà quando esci dal terminale di controllo. Per ottenere ciò devi usare qualcosa come nohup. In realtà questo processo deve supportare l'esecuzione come demone, tut tut."
Abbiamo testato il comando sopra per dimostrare il mio punto e ... sembrava funzionare: il processo avviato dal comando non è terminato quando siamo usciti dal terminale che ha eseguito il comando sopra.
Il comando è uno script Python personalizzato il cui output passa a un file. Per quanto ne so, nella sceneggiatura non esiste una funzionalità "daemonize" intelligente. Non fa nulla del necessario per funzionare come demone elencato nella pagina Wikipedia: Daemon (informatica): Creazione .
L'esecuzione del comando in questo modo si comporta come previsto:
<command> &
exit
Nel caso precedente il processo in background avviato dal comando termina quando usciamo dal terminale.
La mia domanda è questa:
Cosa succede quando aggiungiamo "su - -c &" che impedisce al processo di uscire quando il nostro terminale esce. Vorrei capire in dettaglio per quanto riguarda il terminale di controllo, input e output standard ecc.
È un modo ragionevole per raggiungere l'obiettivo di eseguire questo comando come processo in background? Se no, perché no?
Voglio diffondere le migliori pratiche all'interno della mia azienda, ma devo essere in grado di dimostrare e supportare tutte le raccomandazioni che faccio.
Voglio anche capire cosa sta succedendo esattamente.
chroot --userspec root:root / sh -c "exec some_forever_process" &
. Il lavoro è in esecuzione come lo stesso utente, senza esplicitonohup
prima odisown
dopo. Quindi, in questo caso, come è possibile che il segnale non possa essere inviato all'uscita termine?