Possono verificarsi situazioni in cui è necessario avviare un processo nel sistema attraverso l’interfaccia bash e mantenere questo processo attivo anche dopo aver chiuso la sessione.
In pratica, avviare un processo e lasciare che questo rimanga attivo in background.
Nel caso specifico vedremo come avviare una sessione MongoDB su uno specifico database e lasciare questa attiva in background.
Il comando da utilizzare per l’avvio di un processo è nohup. E’ possibile consultare il manuale attraverso questo link. Nella descrizione è riportato
Run COMMAND, ignoring hangup signals.
Quindi quando avviene la chiusura della sessione bash il sistema invia un messaggio di hangup che il processo avviato tramite nohup ignora.
Il comando da utilizzare per l’avvio è
sudo nohup mongod –dbpath ./mongodb/data/db &
I comandi Linux che terminano con
&
consentono di invocare un comando che il shell avvia in una shell diversa da quella che si sta utilizzando. Il comando ritorna immediatamente alla shell di avvio e in background la nuova shell creata si avvia seguendo i passi richiesti.
Attraverso il comando sudo nohup mongod –dbpath ./mongodb/data/db & il sistema avvia il processo mongodb ma si presenta un errore
nohup: ignoring input and appending output to ‘nohup.out’
Questo errore è dovuto al controllo che nohup effettua sul reindirizzamento dello standard input, output ed error.
Questo errore può essere evitato indicando nel comando nohup i seguenti parametri
> nohup.out 2> nohup.err < /dev/null &
Il comando da utilizzare è
nohup mongod –dbpath ./mongodb/data/db > nohup.out 2> nohup.err < /dev/null &
In questo caso avevo la necessità di utilizzare il processo mongodb ma questo comando può essere utilizzato per avviare qualsiasi processo.
nohup <comand> <parameters> nohup.out 2> nohup.err < /dev/null &