Din moment ce acest post a primit o mulțime de atenție de-a lungul anilor, am'am enumerat soluții de top pe platforma de la partea de jos a acestui post.
Original post:
Vreau să-mi node.js server pentru a rula în fundal, și anume: când închid borna vreau serverul meu pentru a păstra funcționare. Am'am cautat pe google despre asta și a venit cu acest tutorial, cu toate acestea nu't funcționa corespunzător. Deci, în loc de a folosi că daemon script, am crezut că am folosit doar redirecționarea de ieșire (a 2>&1 >> file
parte), dar acest lucru nu exit - am obține o linie goală în terminalul meu, ca's de așteptare pentru ieșire/erori.
Am'am încercat, de asemenea, pentru a pune procesul în fundal, dar de îndată ce închid terminal procesul este ucis la fel de bine.
Deci, cum pot să lăsați-l rulează când am închis computerul local?
Soluții de Top:
Copierea propriul meu răspuns de la https://stackoverflow.com/questions/4681067/how-to-run-a-node-js-application-as-its-own-process/28542093#28542093
2015 răspunde -: aproape fiecare distro Linux vine cu systemd, ceea ce înseamnă pentru totdeauna, monit, PM2, etc nu mai sunt necesare - sistem de OPERARE deja se ocupă de aceste sarcini.
Face o `myapp.serviciul de file (înlocuire 'myapp' cu aplicația's nume, evident):
[Unit]
Description=My app
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
Notă dacă're noi de la Unix: `/var/www/myapp/app.js "trebuie să aibă"#! /usr/bin/env nod de pe prima linie.
Copiați fișierul de servicii în /etc/systemd/sistem
.
Începe cu systemctl start myapp`.
Activați-l pentru a rula la boot cu systemctl enable myapp`.
Vezi busteni cu journalctl -u myapp`
Acest lucru este luat de la Cum vom implementa nod aplicații pe Linux, 2018 edition, care include, de asemenea, comenzi pentru a genera o AWS/DigitalOcean/Azure CloudConfig pentru a construi Linux/nod servere (inclusiv `.serviciul de file).
ACTUALIZARE - după Cum sa menționat într-unul din răspunsurile de mai jos, PM2 are un foarte frumos funcționalitatea din lipsă pentru totdeauna. Luați în considerare utilizarea acestuia.
Răspuns Inițial
Folosi nohup:
nohup node server.js &
EDIT am vrut să adaug că a acceptat răspunsul este chiar calea de a merge. Am'm, folosind pentru totdeauna pe instanțe care au nevoie pentru a rămâne sus. Îmi place să fac npm install-g pentru totdeauna, ca's în nodul de cale și apoi doar începe pentru totdeauna server.js
Acest lucru nu poate fi acceptat, dar am făcut-o cu ecran, mai ales în timp ce în dezvoltare pentru că pot să-l aducă înapoi și să se prostească, dacă este necesar.
screen
node myserver.js
>>CTRL-A then hit D
Pe ecran se va detașa și de a supraviețui te log off. Apoi, puteți să-l înapoi înapoi de a face screen-r. Lovit ecranul manual pentru mai multe detalii. Puteți numi ecrane și fleacuri, dacă vă place.
2016 Actualizare: Nodul-windows/mac/linux serie foloseste un API comun pentru toate sistemele de operare, deci este absolut o soluție relevante. Cu toate acestea, nod-linux generează systemv init fișiere. Ca systemd continuă să crească în popularitate, este o opțiune mai bună pe Linux. PR's binevenit dacă vrea cineva să mai adauge systemd sprijin pentru nod-linux :-)
Original Filet:
Aceasta este o destul de vechi thread acum, dar nod-windows prevede un alt mod de a crea servicii de fundal pe Windows. Ea se bazează vag pe nssmconceptul de a folosi un
exeînveliș în jurul nod script. Cu toate acestea, se folosește
winsw.exe` în loc și oferă o configurabil nod wrapper pentru un control mai granular asupra modului în care procesul pornește/oprește pe eșecuri. Aceste procese sunt disponibile ca orice alt serviciu:
De asemenea, modulul coace într-un eveniment de logare:
Daemonizing scenariul este realizat prin cod. De exemplu:
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'Hello World',
description: 'The nodejs.org example web server.',
script: 'C:\\path\\to\\my\\node\\script.js'
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
});
// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
console.log(svc.name+' started!\nVisit http://127.0.0.1:3000 to see it in action.');
});
// Install the script as a service.
svc.install();
Modulul suporta lucruri cum ar fi plafonarea repornește (așa de rău scripturi don't furtun server-ul dvs.) și în creștere intervale de timp între repornește.
Deoarece nod-servicii windows a alerga ca oricare alta, este posibil de a gestiona/monitor la serviciu cu orice software pe care le utilizați deja.
În cele din urmă, nu există "a face" dependențe. Cu alte cuvinte, un simplu npm install-g nod-windows
va lucra. Nu't nevoie de Visual Studio, .NET, sau nod-gyp magie pentru a instala acest lucru. De asemenea, l's MIT și licențiat BSD.
În dezvăluirea completă, am'm autorul acestui modul. Acesta a fost proiectat pentru a calma exact durere OP cu experiență, dar cu o mai bună integrare în funcționalitatea Sistemului de Operare oferă deja. Sper ca telespectatorii viitoare cu aceeași întrebare găsi că este util.
**** UPDATE: am actualizat pentru a include cele mai recente de pm2:
pentru multe cazuri de utilizare, folosind un sistem de servicii este cel mai simplu și cel mai potrivit mod de a gestiona un nod proces. pentru cei care sunt difuzate numeroase nod procese sau independent-execută nodul microservices într-un singur mediu, pm2 este un mai plin featured instrument.
https://github.com/unitech/pm2
sau procesul lista cu pm2 lista
pm2 busteni
- Comportamentul de configurare
- Sursă de sprijin hartă
- PaaS Compatibil
- Uita-te & Reload
- Modulul de Sistem
- memorie Max reload
- Modul Cluster
- Hot reload
- Dezvoltarea de flux de lucru
- Script-uri de Pornire
- completare Automată
- Desfășurarea fluxului de lucru
- Keymetrics de monitorizare
- API
Dacă se execută OSX, atunci cel mai simplu mod de a produce un adevărat proces de sistem este de a utiliza launchd
să-l lanseze.
Construi un plist ca aceasta, și pune-l în /Library/LaunchDaemons cu numele de top-level-domain.ți-domeniu.aplicație.plist
(ai nevoie să fie rădăcină atunci când plasarea acestuia):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>top-level-domain.your-domain.application</string>
<key>WorkingDirectory</key>
<string>/your/preferred/workingdirectory</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>your-script-file</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Când ați terminat, problema asta (ca root):
launchctl load /Library/LaunchDaemons/top-level-domain.your-domain.application.plist
launchctl start top-level-domain.your-domain.application
și se execută.
Și va fi în continuare difuzate după o repornire.
Pentru alte opțiuni în plist uita-te la pagina de aici: https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html
Dacă doriți pur și simplu pentru a rula script-ul neîntreruptă până când se încheie puteți folosi nohopcum a fost deja menționat în răspunsurile aici. Cu toate acestea, nici unul dintre răspunsurile de o comanda, care, de asemenea, jurnalele de
stdin " și " stdout`.
nohup node index.js >> app.log 2>&1 &
>>
înseamnă a adăuga la app.log`.2>&1
se asigură că erorile sunt, de asemenea, trimite la stdout
și a adăugat la app.log`.Dacă doriți să rulați un nod server (sau ceva de care ar trebui să înceapă din nou până când serverul se restarteaza) ar trebui să utilizați systemd / systemctl.
Eu sunt pur și simplu utilizați daemon modul npm:
var daemon = require('daemon');
daemon.daemonize({
stdout: './log.log'
, stderr: './log.error.log'
}
, './node.pid'
, function (err, pid) {
if (err) {
console.log('Error starting daemon: \n', err);
return process.exit(-1);
}
console.log('Daemonized successfully with pid: ' + pid);
// Your Application Code goes here
});
În ultima vreme am'm, de asemenea, utiliza mon(1) din TJ Holowaychuk pentru a începe și de a gestiona simplu nod de aplicații.
Eu folosesc consilier pentru dezvoltare. Este doar de lucrări. Cand ai de a face modificări la un .js fișiere Supraveghetor repornește automat aplicația cu aceste modificări încărcate.
Aici's un link către pagina sa de Github
Instalați :
sudo npm instala supervizor -g
Puteți face cu ușurință-l viziona alte extensii cu-e. O altă comandă eu folosesc de multe ori este -nu de a ignora anumite foldere.
Puteți utiliza nohup și supervizor pentru a face nod aplicație rula în fundal, chiar și după ce vă deconectați.
sudo nohup supervizor myapp.js &
Încercați să executați această comandă dacă utilizați nohup -
nohup npm start 2>/dev/null 1>/dev/null&
De asemenea, puteți folosi pentru totdeauna pentru a porni serverul
forever start -c "npm start" ./
PM2 susține, de asemenea, ` ` npm start ``
pm2 start npm -- start
Node.js ca un serviciu de fundal în WINDOWS XP
Instalare:
// http://howtonode.org/hello-node var http = necesită('http'); var server = http.createServer(function (request, response) { răspuns.writeHead(200, {"Content-Type": "text/plain"}); răspuns.end("Hello World\n"); }); server.asculta(8000); console.log("Server care rulează la http://127.0.0.1:8000/");
C:\nod> set path=%PATH%;%CD% C:\nod> setx exe calea " CALEA%%" C:\nod> set NODE_PATH="C:\Program Files\nodejs\node_modules" C:\nod> git config --sistem de http.sslcainfo /bin/curl-ca-pachet.crt C:\nod> git clona --recursive git://github.com/isaacs/npm.git C:\nod> cd npm C:\nod\npm> nod cli.js instalați npm -gf C:\nod> cd .. C:\nod> nssm.exe instalați nod-helloworld "C:\Program Files\nodejs\nod.exe" c:\node\helloworld.js C:\nod> net nod de start-helloworld
@echo off nssm.exe instala nod-%~n1 "C:\Program Files\nodejs\nod.exe" %~s1 net nod de start-%~n1 pauză
Servicii De Management:
Acceptat răspunsul este, probabil, cea mai bună producție a răspuns, dar pentru o scurtă hack face dev muncă, am găsit asta:
nodejs scriptname.js &
n't de lucru, pentru că nodejs părea să înghiți până &, și deci, lucru pe care nu't lasă-mă să păstrați folosind terminal fără a scriptname.js pe moarte.
Dar am pus nodejs scriptname.js într-un .sh fișier, și
nohup sh startscriptname.sh &
lucrat.
Cu siguranta nu o producție de lucru, dar se rezolvă "am nevoie pentru a păstra folosind terminalul meu și don't doriți să începeți 5 terminale diferite" problemă.
Dacă se execută nodejs în linux server, cred că acest lucru este cel mai bun mod.
Creați un script de serviciu și copiați în /etc/init/nodejs.conf
serviciul de start: sudo service nodejs începe
serviciu unic: serviciu sudo nodejs opri
Sevice script
description "DManager node.js server - Last Update: 2012-08-06"
author "Pedro Muniz - [email protected]"
env USER="nodejs" #you have to create this user
env APPNAME="nodejs" #you can change the service name
env WORKDIR="/home/<project-home-dir>" #set your project home folder here
env COMMAND="/usr/bin/node <server name>" #app.js ?
# used to be: start on startup
# until we found some mounts weren't ready yet while booting:
start on started mountall
stop on shutdown
# Automatically Respawn:
respawn
respawn limit 99 5
pre-start script
sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/$APPNAME.log
end script
script
# Not sure why $HOME is needed, but we found that it is:
export HOME="<project-home-dir>" #set your project home folder here
export NODE_PATH="<project node_path>"
#log file, grant permission to nodejs user
exec start-stop-daemon --start --make-pidfile --pidfile /var/run/$APPNAME.pid --chuid $USER --chdir $WORKDIR --exec $COMMAND >> /var/log/$APPNAME.log 2>&1
end script
post-start script
# Optionally put a script here that will notifiy you node has (re)started
# /root/bin/hoptoad.sh "node.js has started!"
end script
pre-stop script
sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/$APPNAME.log
end script
Iunie 2017 Actualizare: Soluție pentru Linux: (Red hat). Comentariile anterioare nu't de lucru pentru mine. Aceasta funcționează și pentru mine pe Amazon Web Service - Red Hat 7. Sper că acest lucru funcționează pentru cineva de acolo.
A. Create the service file
sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=Your app
After=network.target
[Service]
ExecStart=/home/ec2-user/meantodos/start.sh
WorkingDirectory=/home/ec2-user/meantodos/
[Install]
WantedBy=multi-user.target
B. Create a shell file
/home/ec2-root/meantodos/start.sh
#!/bin/sh -
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
npm start
then:
chmod +rx /home/ec2-root/meantodos/start.sh
(to make this file executable)
C. Execute the Following
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl status myapp
(If there are no errors, execute below. Autorun after server restarted.)
chkconfig myapp -add
folosi nssm cea mai bună soluție pentru windows, trebuie doar să descărcați nssm, pentru a deschide cmd nssm director și tipul
nssm install <service name> <node path> <app.js path>
eg: nssm install myservice "C:\Program Files\nodejs" "C:\myapp\app.js"
aceasta va instala un nou windows service care vor fi listate la servicii.msc de acolo, puteți porni sau opri serviciul, acest serviciu va începe automat și puteți configura pentru a reporni dacă nu reușește.
Pentru a completa diferitele opțiuni propuse, aici este unul mai mult: `daemon comandă în GNU/Linux, despre care poți citi aici: http://libslack.org/daemon/manpages/daemon.1.html. (ne cerem scuze dacă acest lucru este deja menționat într-unul din comentariile de mai sus).
Pentru persoanele care folosesc versiuni mai noi ale daemon modul de nmp - aveți nevoie pentru a trece descriptorii de fișier în loc de siruri de caractere:
var fs = require('fs');
var stdoutFd = fs.openSync('output.log', 'a');
var stderrFd = fs.openSync('errors.log', 'a');
require('daemon')({
stdout: stdoutFd,
stderr: stderrFd
});
Check out fuga! În afară de lansarea mulți lucrători, puteți demoniza nod proces prea!