Questa è una vecchia domanda, ma è classificata in alto su Google. Quasi non riesco a credere alle risposte più votate, perché l'esecuzione di un processo node.js all'interno di una sessione dello schermo, con &
o anche con il nohup
flag - tutti loro - sono solo soluzioni alternative.
Specialmente la soluzione screen / tmux, che dovrebbe davvero essere considerata una soluzione amatoriale . Screen e Tmux non sono pensati per mantenere in esecuzione i processi, ma per sessioni terminali multiplexing. Va bene, quando si esegue uno script sul server e si desidera disconnettersi. Ma per un server node.js non vuoi che il tuo processo sia collegato a una sessione terminale. Questo è troppo fragile. Per far funzionare le cose devi demonizzare il processo!
Ci sono molti buoni strumenti per farlo.
PM2 : http://pm2.keymetrics.io/
# basic usage
$ npm install pm2 -g
$ pm2 start server.js
# you can even define how many processes you want in cluster mode:
$ pm2 start server.js -i 4
# you can start various processes, with complex startup settings
# using an ecosystem.json file (with env variables, custom args, etc):
$ pm2 start ecosystem.json
Un grande vantaggio che vedo a favore di PM2 è che può generare lo script di avvio del sistema per rendere persistente il processo tra i riavvii:
$ pm2 startup [platform]
Dove platform
può essere ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.
forever.js : https://github.com/foreverjs/forever
# basic usage
$ npm install forever -g
$ forever start app.js
# you can run from a json configuration as well, for
# more complex environments or multi-apps
$ forever start development.json
Script Init :
Non entrerò nei dettagli su come scrivere uno script di init, perché non sono un esperto in questo argomento e sarebbe troppo lungo per questa risposta, ma fondamentalmente sono semplici script di shell, innescati da eventi del sistema operativo. Puoi leggere di più su questo qui
Docker :
Esegui il tuo server in un contenitore Docker con l' -d
opzione e, voilá , hai un server node.js demone!
Ecco un Dockerfile di esempio (dalla guida ufficiale di node.js ):
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
Quindi crea la tua immagine ed esegui il tuo contenitore:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
Spero che questo aiuti qualcuno ad atterrare su questa pagina. Utilizzare sempre lo strumento adeguato per il lavoro. Ti farà risparmiare un sacco di mal di testa e nel giro di ore!
exit
. Quando chiudo semplicemente la finestra di Putty, fallisce.