मैं एक पृष्ठभूमि सेवा के रूप में एक नोड.जेएस ऐप कैसे चलाऊं?


503

चूंकि इस पोस्ट ने पिछले कुछ वर्षों में बहुत अधिक ध्यान दिया है, इसलिए मैंने इस पोस्ट के निचले भाग में प्रति मंच शीर्ष समाधान सूचीबद्ध किए हैं।


मूल पोस्ट :

मैं चाहता हूं कि मेरा नोड.जेएस सर्वर बैकग्राउंड में चले, यानी: जब मैं अपना टर्मिनल बंद करता हूं तो मैं चाहता हूं कि मेरा सर्वर चालू रहे। मैंने इसे देखा है और इस ट्यूटोरियल के साथ आया हूँ , हालाँकि यह इरादा के अनुसार काम नहीं करता है। इसलिए उस डेमॉन स्क्रिप्ट का उपयोग करने के बजाय, मैंने सोचा कि मैं सिर्फ आउटपुट पुनर्निर्देशन ( 2>&1 >> fileभाग) का उपयोग करता हूं , लेकिन यह भी बाहर नहीं निकलता है - मुझे अपने टर्मिनल में एक खाली लाइन मिलती है, जैसे कि यह आउटपुट / त्रुटियों की प्रतीक्षा कर रहा है।

मैंने प्रक्रिया को पृष्ठभूमि में रखने की भी कोशिश की है, लेकिन जैसे ही मैं अपने टर्मिनल को बंद करता हूं, प्रक्रिया को भी मार दिया जाता है।

तो जब मैं अपना स्थानीय कंप्यूटर बंद करता हूं तो मैं इसे कैसे चला सकता हूं?


शीर्ष समाधान :


3
मुझे लगता है कि वह अपने स्थानीय सिस्टम को बंद करने का मतलब था
कमल रेड्डी

46
उनका मतलब था एक सत्र को बंद करना कार्य को समाप्त करता है
thedjaney

5
github.com/Unitech/pm2 एक उच्च अनुरक्षित और बहुत ही स्थिर प्रक्रिया प्रबंधक है, इसे आज़माएं!
यूनिटेक

1
आप स्क्रीन का उपयोग कर सकते हैं ( aperiodic.net/screen/quick_reference )
करंटन

जवाबों:


433

अपने स्वयं के उत्तर की नकल करना मैं अपनी प्रक्रिया के रूप में Node.js एप्लिकेशन कैसे चलाऊं?

2015 उत्तर : लगभग हर लिनक्स डिस्ट्रो सिस्टमड के साथ आता है, जिसका अर्थ है हमेशा के लिए, मोनिट, पीएम 2, आदि अब आवश्यक नहीं हैं - आपका ओएस पहले से ही इन कार्यों को संभालता है

एक myapp.serviceफ़ाइल बनाओ (अपने ऐप के नाम के साथ 'myapp' की जगह, जाहिर है):

[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

ध्यान दें कि यदि आप यूनिक्स के लिए नए हैं: पहली पंक्ति में /var/www/myapp/app.jsहोना चाहिए #!/usr/bin/env node

में अपनी सेवा फ़ाइल की प्रतिलिपि बनाएँ /etc/systemd/system

इसके साथ शुरू करो systemctl start myapp

इसे बूट पर चलाने के लिए सक्षम करें systemctl enable myapp

के साथ लॉग देखें journalctl -u myapp

यह कैसे हम लिनक्स, 2018 संस्करण पर नोड ऐप्स को तैनात करते हैं , जिसमें लिनक्स / नोड सर्वर ( .serviceफ़ाइल सहित ) बनाने के लिए AWS / DigitalOcean / Azure CloudConfig बनाने के लिए कमांड भी शामिल हैं ।


4
उपस्टार्ट, जब उपलब्ध है, एक अच्छा समाधान भी है। किसी भी तरह से, आपको अपने नोडज डेमन को चालू रखने के लिए एक नोडज प्रक्रिया पर भरोसा नहीं करना चाहिए। यह पूरी तरह से ओएस के लिए एक कार्य है। किंडल नोड्ज और हमेशा के लिए चला गया है ....
131

19
ध्यान दें कि उपयोगकर्ता के रूप में सिस्टमड सेवाएं चलाना भी संभव है। उदाहरण के लिए इस ट्यूटोरियल को देखें । आप अपनी सेवा फ़ाइल को इसमें डाल सकते हैं ~/.config/systemd/user, इसके साथ शुरू कर सकते हैं systemctl --user start myapp, इसे सक्षम कर सकते हैं systemctl --user enable myapp
cdauth

5
इस उत्तर के लिए धन्यवाद। यह वही है जो मैं शुद्ध और स्पष्ट चाहता
हूं

5
मैंने "हमेशा के लिए" उत्तर के बजाय इस उत्तर को स्वीकार कर लिया है, क्योंकि मुझे भी लगता है कि यह करने का सबसे अच्छा तरीका है। मैक और विंडोज के लिए समान उत्तर हैं, लेकिन मुझे लगता है कि बहुमत लिनक्स समाधान की तलाश कर रहा है।
पीटर क्रुथोफ

11
EC2 में AMI पथ / etc / systemd / system मौजूद नहीं है। क्या आप बता सकते हैं कि AWS EC2 Linux AMI में सही रास्ता क्या है?
रेने मिशेल

241

आप हमेशा के लिए उपयोग कर सकते हैं, यह सुनिश्चित करने के लिए एक साधारण सीएलआई उपकरण कि एक दी गई नोड स्क्रिप्ट लगातार (हमेशा के लिए) चलती है: https://www.npmjs.org/package/forever


4
नवीनतम नोड के साथ मैं इसे स्क्रिप्ट नाम (त्रुटि) के माध्यम से एक ऐप को रोकने में असमर्थ था - यह भी - आम तौर पर दुर्व्यवहार (ओएस-एक्स पर था) - सभी को स्रोत से बनाया गया है, अजीब तरह से। एक बुरी स्थिति में छोड़ दिया, मुझे विश्वास के साथ नहीं भरा।
माइकल निले

4
जबकि nohup चाल करता है, हमेशा के लिए एक बेहतर उपाय है क्योंकि यह प्रक्रिया को निष्क्रिय करता है। महान उपकरण!
पीटर क्रुथोफ

5
वैसे, यहां एक सरल ट्यूटोरियल उपलब्ध है: एक नोड रखें
kehers

2
मैंने कुछ समय के लिए फॉरएवर का उपयोग किया, शुरुआत में सब कुछ ठीक लगता है लेकिन फिर आपदा आ गई। फॉरएवर अब प्रक्रियाओं का प्रबंधन नहीं कर सका और उन्हें जंगली चलाने दिया। अभी भी एक बेहतर समाधान खोजने के लिए संघर्ष कर रहा है। मैं nohup का उपयोग करने की कोशिश करूँगा
LN

5
ज्योफ्री- नहीं, आपको forever start /path/to/yourApp.jsअपने सर्वर स्टार्टअप स्क्रिप्ट में करने की आवश्यकता होगी ।
mikermcneil

215

अद्यतन - जैसा कि नीचे दिए गए उत्तरों में से एक में वर्णित है, PM2 में कुछ बहुत अच्छी कार्यक्षमता हमेशा के लिए गायब है। इसका उपयोग करने पर विचार करें।

मूल उत्तर

नोह का उपयोग करें :

nohup node server.js &

EDIT मैं जोड़ना चाहता था कि स्वीकृत उत्तर वास्तव में जाने का रास्ता है। मैं हमेशा ऐसे उदाहरणों पर प्रयोग कर रहा हूं, जिन्हें ऊपर बने रहने की जरूरत है। मुझे ऐसा करना पसंद है npm install -g foreverइसलिए यह नोड के रास्ते में है और फिर बस करना हैforever start server.js


136
जानने nohupके लिए शांत भाग: no hangupपुराने दिनों से आता है, जहां आप चाहते थे कि जब आप अपने मॉडेम को "हैंगअप" करते हैं तो आप एक प्रक्रिया को जीवित रखें।
jAndy

1
आजकल यह बजाय सिग्नल 1 का नाम है जो प्रक्रियाओं को चेतावनी देता है कि उपयोगकर्ता ने शेल बंद कर दिया है (या खोया मॉडेम कनेक्शन, निश्चित रूप से: P)
lapo

7
यह सबसे अच्छा समाधान नहीं है क्योंकि यदि एप्लिकेशन एक अनकही त्रुटि का सामना करता है तो नोड प्रक्रिया बाहर निकल जाएगी और पुनः आरंभ नहीं होगी। फिर भी, यह विकास का एक उचित विकल्प है।
एंडी ई

1
मैं इसमें पर्यावरण चर कैसे जोड़ूंगा? उदाहरण के लिए: पोर्ट = 80 नोड server.js
क्षमा करनेवाला


67

यह स्वीकृत तरीका नहीं हो सकता है, लेकिन मैं इसे स्क्रीन के साथ करता हूं, विशेष रूप से विकास में जबकि मैं इसे वापस ला सकता हूं और यदि आवश्यक हो तो इसके साथ बेवकूफ बना सकता हूं।

screen
node myserver.js
>>CTRL-A then hit D

स्क्रीन अलग हो जाएगा और आप लॉग ऑफ से बच जाएगा। फिर आप इसे वापस स्क्रीन कर सकते हैं -r। अधिक जानकारी के लिए स्क्रीन मैनुअल को हिट करें। आप चाहें तो स्क्रीन और व्हाट्सएप को नाम दे सकते हैं।


2
इसके अलावा, tmux अच्छा है। स्क्रीन (CTRL-A की बजाय CTRL-B डिफ़ॉल्ट है, लेकिन कॉन्फ़िगर करने योग्य है)। Tmux में पैनल (स्प्लिट स्क्रीन) हैं।
Snapfractalpop

1
स्क्रीन में पैनल भी हैं
बिली मून

मैं एक उल्का ऐप के लिए कुछ हफ़्ते से इसका उपयोग कर रहा हूं। कोचिंग और रिटेटिंग के लिए `$ स्क्रीन -dr’ कभी-कभी आवश्यक हो सकता है।
विनय वेमुला

मेरे लिए काम करने का सबसे आसान तरीका है। लेकिन मैं सहमत हूं, सबसे अच्छा समाधान नहीं है
पोमे डी टेरे

यह समाधान प्रणाली का एक रिबूट के बाद मौजूद नहीं होता
wnasich

60

2016 अपडेट: नोड-विंडोज / मैक / लिनक्स श्रृंखला सभी ऑपरेटिंग सिस्टम में एक सामान्य एपीआई का उपयोग करती है, इसलिए यह बिल्कुल एक प्रासंगिक समाधान है। तथापि; नोड-लाइनक्स सिस्टमव इनिट फ़ाइलों को उत्पन्न करता है। जैसा कि सिस्टमड ने लोकप्रियता में वृद्धि जारी रखी है, यह वास्तविक रूप से लिनक्स पर एक बेहतर विकल्प है। किसी के नोड-लिनक्स में systemd समर्थन जोड़ना चाहते हैं तो पीआर का स्वागत :-)

मूल धागा:

यह अब एक बहुत पुराना धागा है, लेकिन नोड-विंडोज विंडोज पर पृष्ठभूमि सेवाओं को बनाने का एक और तरीका प्रदान करता है। यह शिथिल रूप से आपके नोड लिपि के चारों ओर आवरण nssmका उपयोग करने की अवधारणा पर आधारित है exe। तथापि; इसके winsw.exeबजाय इसका उपयोग करता है और विफलता पर प्रक्रिया कैसे शुरू / रुकती है, इस पर अधिक बारीक नियंत्रण के लिए एक विन्यास योग्य नोड आवरण प्रदान करता है। ये प्रक्रियाएँ किसी अन्य सेवा की तरह उपलब्ध हैं:

यहाँ छवि विवरण दर्ज करें

मॉड्यूल कुछ ईवेंट लॉगिंग में भी सेंध लगाता है:

यहाँ छवि विवरण दर्ज करें

कोड के माध्यम से अपनी स्क्रिप्ट को पूरा करना। उदाहरण के लिए:

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();

मॉड्यूल कैपिंग पुनरारंभ जैसी चीजों का समर्थन करता है (इसलिए बुरी स्क्रिप्ट आपके सर्वर को नली नहीं देती) और पुनरारंभ के बीच समय अंतराल बढ़ रहा है।

चूंकि नोड-विंडोज़ सेवाएं किसी अन्य की तरह चलती हैं, इसलिए जो भी सॉफ़्टवेयर आप पहले से उपयोग करते हैं, उसके साथ सेवा का प्रबंधन / निगरानी करना संभव है।

अंत में, कोई makeनिर्भरताएं नहीं हैं । दूसरे शब्दों में, एक सीधाnpm install -g node-windows काम करेगा। इसे स्थापित करने के लिए आपको Visual Studio, .NET, या नोड-जिप जादू की आवश्यकता नहीं है। इसके अलावा, यह एमआईटी और बीएसडी लाइसेंस प्राप्त है।

पूर्ण प्रकटीकरण में, मैं इस मॉड्यूल का लेखक हूं। यह ओपी के अनुभव के सटीक दर्द को राहत देने के लिए डिज़ाइन किया गया था, लेकिन कार्यक्षमता में तंग एकीकरण के साथ ऑपरेटिंग सिस्टम पहले से ही प्रदान करता है। मुझे उम्मीद है कि इसी सवाल के साथ भविष्य के दर्शक इसे उपयोगी पाएंगे।


8
मैंने अब इसे नोड-मैक पर पोर्ट किया है , जो OSX पर समान कार्यक्षमता प्रदान करता है।
कोरी

1
मैं नोड कार्यक्रमों के एक जोड़े को शेड्यूल करने और नोड-विंडोज, फॉरएवर या क्यू चुनने के निर्णय से पहले खड़ा होने के बिंदु पर आया हूं। मैं नोड-विंडो की ओर झुकता हूं, लेकिन समझना चाहता हूं कि जब मैं एक दर्जन नोड कार्यक्रमों को शेड्यूल करना और मॉनिटर करना चाहता हूं तो फॉरएवर या क्यू का उपयोग क्यों नहीं करना चाहिए। कुछ हमेशा के लिए चल रहे हैं। निगरानी भी चाहिए।
क्रिस्टियान वेस्टरबेक

5
नोड-विंडो पृष्ठभूमि सेवाओं के प्रबंधन के लिए देशी ओएस का उपयोग करती है, और लॉगिंग के लिए देशी घटना लॉग। फॉरएवर की अपनी कस्टम मॉनिटरिंग और लॉगिंग है। मैंने इस पर एक लेख medium.com/p/2a602ea657a2 पर लिखा है, ऐसा लगता है कि आपको अपनी स्क्रिप्ट शेड्यूल करने की आवश्यकता है, न कि उन्हें हर समय पृष्ठभूमि सेवाओं के रूप में चलाने की। क्यू और एजेंडा जैसी परियोजनाओं को इसके लिए डिज़ाइन किया गया है। नोड-विंडो और फॉरएवर एक अलग उद्देश्य की पूर्ति करते हैं।
कोरी

1
@ कोरी, मैं नोड-मैक में शामिल उदाहरण को कैसे चलाऊं? टर्मिनल से, मैंने नोड इंस्टाल करने की कोशिश की। जेएस, लेकिन यह पिकअप हेलोवर्ल्ड नहीं दिखता है। जेएस
एडविन इकेचुकवु ओकोंकवो

@ ईडविन - आपके द्वारा उपयोग किए जा रहे कोड सहित समस्या के बारे में अधिक विवरण के साथ एक नया प्रश्न खोलने के लिए सबसे अच्छा हो सकता है।
कोरी

28

अद्यतन : मैं pm2 से नवीनतम शामिल करने के लिए अद्यतन:

कई उपयोग मामलों के लिए, एक नोड सेवा को प्रबंधित करने के लिए एक सिस्टेम सेवा का उपयोग करना सबसे सरल और सबसे उपयुक्त तरीका है। उन लोगों के लिए जो एक ही वातावरण में कई नोड प्रक्रिया या स्वतंत्र रूप से चल रहे नोड माइक्रोसर्विसेज चला रहे हैं, pm2 एक अधिक पूर्ण विशेषताओं वाला उपकरण है।

https://github.com/unitech/pm2

http://pm2.io

  • इसके साथ pm2 monitया प्रक्रिया सूची के साथ कई प्रक्रियाओं की कमांड लाइन निगरानी के लिए एक बहुत उपयोगी निगरानी सुविधा है -> सुंदर 'गुई'pm2 list
  • लॉग प्रबंधन आयोजित -> pm2 logs
  • अन्य सामान:
    • व्यवहार विन्यास
    • स्रोत मानचित्र समर्थन
    • पैसा संगत
    • देखो और पुनः लोड करें
    • मॉड्यूल प्रणाली
    • अधिकतम मेमोरी पुनः लोड
    • क्लस्टर मोड
    • गर्म पुनः लोड
    • विकास संबंधी कार्य
    • स्टार्टअप लिपियों
    • ऑटो पूरा करना
    • तैनाती वर्कफ़्लो
    • कीमेट्रिक्स की निगरानी
    • एपीआई

19

यदि आप OSX चला रहे हैं, तो launchdइसे लॉन्च करने के लिए एक सच्ची प्रणाली प्रक्रिया का उत्पादन करने का सबसे आसान तरीका है।

इस तरह एक प्लिस्ट बनाएं, और इसे / लाइब्रेरी / लॉन्चडैमन्स में नाम के साथ डालें top-level-domain.your-domain.application.plist(आपको इसे रखने पर रूट करने की आवश्यकता है):

<?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>

जब किया जाए, तो इसे जारी करें (मूल के रूप में):

launchctl load /Library/LaunchDaemons/top-level-domain.your-domain.application.plist
launchctl start top-level-domain.your-domain.application

और आप भाग रहे हैं।

और आप एक पुनरारंभ के बाद भी चल रहे होंगे।

प्लिस्ट के अन्य विकल्पों के लिए यहाँ मैन पेज देखें : https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html


उपयोगकर्ता इस सेवा को किस रूप में चलाएगा? क्या उपयोगकर्ता को सेट करने का कोई तरीका है?
rjmunro

19

यदि आप केवल स्क्रिप्ट को निर्बाध रूप से चलाना चाहते हैं, जब तक कि वह पूरी न हो जाए, तो आप nohupयहां दिए गए उत्तरों में पहले ही बताए अनुसार उपयोग कर सकते हैं। हालाँकि, कोई भी उत्तर पूर्ण आदेश नहीं देता है जो लॉग भी करता है stdinऔर stdout

nohup node index.js >> app.log 2>&1 &
  • इसका >>मतलब है app.log
  • 2>&1यह सुनिश्चित करता है कि त्रुटियों को भी भेजा जाता है stdoutऔर इसमें जोड़ा जाता है app.log
  • अंत &सुनिश्चित करता है कि आपका वर्तमान टर्मिनल कमांड से डिस्कनेक्ट हो गया है ताकि आप काम करना जारी रख सकें।

यदि आप एक नोड सर्वर (या कुछ और जो सर्वर के पुनरारंभ होने पर वापस शुरू होना चाहिए) को चलाना चाहते हैं तो आपको systemd / systemctl का उपयोग करना चाहिए ।


1
सबसे अच्छा जवाब M8।
bholagabbar

1
अच्छी तरह से समझाया
प्रखर प्रकाश भारद्वाज

15

यदि आप nohup का उपयोग कर रहे हैं तो इस कमांड को चलाने का प्रयास करें -

nohup npm start 2>/dev/null 1>/dev/null&

सर्वर शुरू करने के लिए भी आप हमेशा के लिए उपयोग कर सकते हैं

forever start -c "npm start" ./ 

PM2 भी समर्थन करता है npm start

pm2 start npm -- start

2
thnx, इसने पूरी तरह से काम किया। pm2 start npm -- start
16

13

मैं केवल डेमन एनपीएम मॉड्यूल का उपयोग कर रहा हूं :

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
});

हाल ही में मैं TJ Holowaychuk से मोन (1) का उपयोग कर रहा हूं और सरल नोड एप्लिकेशन को शुरू और प्रबंधित कर रहा हूं ।


12

मैं विकास के लिए पर्यवेक्षक का उपयोग करता हूं। यह सिर्फ काम करता है। जब आप कभी भी .js फ़ाइल में परिवर्तन करते हैं तो पर्यवेक्षक आपके ऐप को उन परिवर्तनों के साथ स्वचालित रूप से पुनः आरंभ करता है।

यहाँ इसके Github पेज का लिंक दिया गया है

इंस्टॉल :

sudo npm स्थापित सुपरवाइज़र -g

-E के साथ आप अन्य एक्सटेंशन को आसानी से देख सकते हैं। एक और कमांड जो मैं अक्सर उपयोग करता हूं, वह है- कुछ फ़ोल्डर्स को अनदेखा करना।

आप लॉग आउट करने के बाद भी अपने नोड ऐप को बैकग्राउंड में चलाने के लिए nohup और पर्यवेक्षक का उपयोग कर सकते हैं।

sudo nohup पर्यवेक्षक myapp.js और


1
मुझे लगता है कि अभ्यास पर्यवेक्षक अधिकांश डेमॉन मॉड्यूलों की तुलना में एक बेहतर विकल्प है, विशेष रूप से अपडेट को चेकआउट करने के लिए एक webhook के साथ संयोजन में उपयोग किया जाता है।
इयान कॉलिन्स

मैं यह दूसरा। यदि आप PHP फ़ाइलों को बदलते हैं, तो क्या आप Apache या Nginx सर्वर को पुनः आरंभ करेंगे? निश्चित रूप से नहीं। फिर पूरे Node.js सर्वर को पुनः आरंभ करने के लिए परेशान होना भी कोड की एक पंक्ति को क्यों बदलना है? हालांकि यह सबसे अच्छा समाधान नहीं हो सकता है, पर्यवेक्षक के साथ पट्टे पर आपको पुनरारंभ प्रक्रिया के बारे में चिंता करने की आवश्यकता नहीं है (वास्तव में पुनरारंभ अभी भी होता है)।
झांग बज़

7

WINDOWS XP में पृष्ठभूमि सेवा के रूप में Node.js

स्थापना:

  1. इंस्टॉलर निष्पादन योग्य के माध्यम से WGET http://gnuwin32.sourceforge.net/packages/wget.htm स्थापित करें
  2. GIT http://code.google.com/p/msysgit/downloads/list स्थापित करेंइंस्टॉलर एक्जीक्यूटेबल के माध्यम से
  3. NSSM http://nssm.cc/download/?page=download स्थापित करें को nnsm.exe को% windir% / system32 फ़ोल्डर में कॉपी करके
  4. सी बनाएँ: \ नोड \ helloworld.js

    // http://howtonode.org/hello-node
    var http = require('http');
    var server = http.createServer(function (request, response) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.end("Hello World\n");
    });
    server.listen(8000);
    console.log("Server running at http://127.0.0.1:8000/");
  5. कमांड कंसोल खोलें और निम्न टाइप करें (केवल तभी सेट करें यदि संसाधन किट स्थापित है)

    C:\node> set path=%PATH%;%CD%
    C:\node> setx path "%PATH%"
    C:\node> set NODE_PATH="C:\Program Files\nodejs\node_modules"
    C:\node> git config --system http.sslcainfo /bin/curl-ca-bundle.crt    
    C:\node> git clone --recursive git://github.com/isaacs/npm.git    
    C:\node> cd npm    
    C:\node\npm> node cli.js install npm -gf   
    C:\node> cd ..    
    C:\node> nssm.exe install node-helloworld "C:\Program Files\nodejs\node.exe" c:\node\helloworld.js    
    C:\node> net start node-helloworld
  6. एक निफ्टी बैच गुडी सी: \ नोड \ ServiceMe.cmd बनाने के लिए है

    @echo off
    nssm.exe install node-%~n1 "C:\Program Files\nodejs\node.exe" %~s1
    net start node-%~n1
    pause

सेवा प्रबंधन:

  • सेवाएँ स्वयं अब Start-> Run-> services.msc के माध्यम से या Start-> Run-> MSCONFIG-> सेवाओं के माध्यम से सुलभ हैं (और 'सभी Microsoft सेवाएँ छिपाएँ' जाँचें)।
  • स्क्रिप्ट 'नोड-' के साथ बैच स्क्रिप्ट के माध्यम से किए गए प्रत्येक नोड को उपसर्ग करेगी।
  • इसी तरह वे रजिस्ट्री में पाए जा सकते हैं: " HKLM \ SYSTEM \ CurrentControlSet \ Services \ नोड-xxx2 "

7

स्वीकृत उत्तर संभवतः सबसे अच्छा उत्पादन उत्तर है, लेकिन त्वरित हैकिंग देव कार्य के लिए, मुझे यह मिला:

nodejs scriptname.js & काम नहीं किया, क्योंकि नोडज को & gobble लग रहा था, और इसलिए इस चीज ने मुझे scriptname.js के बिना टर्मिनल का उपयोग करते रहने दिया।

लेकिन मैंने nodejs scriptname.jsएक .sh फ़ाइल में रखा , और nohup sh startscriptname.sh &काम किया।

निश्चित रूप से उत्पादन की बात नहीं है, लेकिन यह "मुझे अपने टर्मिनल का उपयोग करने की आवश्यकता है और 5 अलग-अलग टर्मिनलों" की समस्या शुरू नहीं करना चाहता है।


4

यदि आप लिनक्स सर्वर में नोडजेज चला रहे हैं, तो मुझे लगता है कि यह सबसे अच्छा तरीका है।

एक सेवा स्क्रिप्ट बनाएं और /etc/init/nodejs.conf पर कॉपी करें

सेवा प्रारंभ करें: sudo सेवा नोड्ज प्रारंभ करें

रोक सेवा: sudo सेवा नोडज रोकें

सेविस लिपि

description "DManager node.js server - Last Update: 2012-08-06"
author      "Pedro Muniz - pedro.muniz@geeklab.com.br"

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

4

जून 2017 अपडेट:
लिनक्स के लिए समाधान: (लाल टोपी)। पिछली टिप्पणियाँ मेरे लिए काम नहीं करती हैं। यह मेरे लिए Amazon Web Service - Red Hat 7. पर काम करता है। आशा है कि यह किसी के लिए काम करता है।

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

बहुत दिलचस्प है, मैं बस iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080इसके बारे में उत्सुक हूं कि यह क्या करता है। क्या आप मुझे अधिक जानकारी दे सकते हैं। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि यह ट्रैफ़िक को रीडायरेक्ट 80करता है 8080जिससे नोड सर्वर सुनता है, है ना?
शाकिबा मोशिरी

3

विंडोज़ के लिए nssm का सबसे अच्छा समाधान का उपयोग करें , बस nssm डाउनलोड करें , nssm निर्देशिका के लिए cmd खोलें और टाइप करें

nssm install <service name> <node path> <app.js path> 

eg: nssm install myservice "C:\Program Files\nodejs" "C:\myapp\app.js" 

यह एक नई विंडोज़ सेवा स्थापित करेगा, जो कि services.msc पर सूचीबद्ध होगी , वहाँ से आप सेवा को शुरू या बंद कर सकते हैं, यह सेवा स्वतः प्रारंभ हो जाएगी और यदि यह विफल हो जाती है तो आप पुनः आरंभ करने के लिए कॉन्फ़िगर कर सकते हैं।


2

सुझाए गए विभिन्न विकल्पों को राउंड करने के लिए, यहां एक और है: daemonजीएनयू / लिनक्स में कमांड, जिसे आप यहां पढ़ सकते हैं: http://libslack.org/daemon/manpages/daemon.1.html । (माफी अगर यह पहले से ही ऊपर टिप्पणियों में से एक में उल्लेख किया गया है)।



1

क्या किसी ने "2> और 1" की स्थिति का एक तुच्छ गलत देखा है?

2>&1 >> file

होना चाहिए

>> file 2>&1

1

मैं दूरस्थ होस्ट पर एक से अधिक विंडो / फलक विकास परिवेश के लिए tmux का उपयोग करता हूं। यह वास्तव में अलग करने और प्रक्रिया को पृष्ठभूमि में चालू रखने के लिए सरल है। Tmux पर एक नजर है


1

डेमन एनपीएम मॉड्यूल के नए संस्करणों का उपयोग करने वाले लोगों के लिए - आपको स्ट्रिंग्स के बजाय फ़ाइल डिस्क्रिप्टर पास करने की आवश्यकता है:

var fs = require('fs');
var stdoutFd = fs.openSync('output.log', 'a');
var stderrFd = fs.openSync('errors.log', 'a');
require('daemon')({
    stdout: stdoutFd, 
    stderr: stderrFd
});

0

PM2 नोड-जेएस अनुप्रयोगों के लिए एक उत्पादन प्रक्रिया प्रबंधक है जिसमें बिल्ट-इन लोड बैलेंसर होता है। यह आपको एप्लिकेशन को हमेशा के लिए जीवित रखने, डाउनटाइम के बिना उन्हें फिर से लोड करने और सामान्य सिस्टम व्यवस्थापक कार्यों को सुविधाजनक बनाने की अनुमति देता है। https://github.com/Unitech/pm2


गंभीर स्मृति खपत मुद्दों! फ़्यूज़न + नेगनेक्स के लिए जाएं
पटेल

0

मुझे आश्चर्य है कि किसी ने भी ग्वावनोर का उल्लेख नहीं किया है

मैंने हमेशा की कोशिश की है, pm2, आदि, लेकिन, जब बात सॉलिड कंट्रोल और वेब बेस्ड परफॉर्मेंस मेट्रिक्स की आती है, तो मैंने ग्वानोर को अब तक सबसे बेहतर पाया है। साथ ही, यह पूरी तरह से ओपन सोर्स भी है।

यहाँ छवि विवरण दर्ज करें

संपादित करें: हालाँकि, मुझे यकीन नहीं है कि यह विंडोज़ पर काम करता है। मैंने इसे केवल linux पर उपयोग किया है।


4
2017 तक बासी लगता है। असफलता का निर्माण करें। अंतिम वर्ष में कोई कोड नहीं धकेलता है। संदिग्ध।
अज़तर

0

चूंकि मैं इस विकल्प को उपलब्ध कराए गए उत्तरों की सूची में याद कर रहा हूं, इसलिए मैं 2020 के रूप में एक योग्य विकल्प जोड़ना चाहूंगा: डॉकटर या कोई समकक्ष कंटेनर प्लेटफ़ॉर्म। यह सुनिश्चित करने के अलावा कि आपका एप्लिकेशन स्थिर वातावरण में काम कर रहा है, अतिरिक्त सुरक्षा लाभ के साथ-साथ बेहतर पोर्टेबिलिटी भी हैं।

विंडोज, मैकओएस और अधिकांश / प्रमुख लिनक्स वितरण के लिए डॉकटर समर्थन है। समर्थित प्लेटफॉर्म पर डॉकटर स्थापित करना सीधे-सीधे और अच्छी तरह से प्रलेखित है। Node.js एप्लिकेशन को सेट करना उतना ही सरल है, जितना कि कंटेनर में रखना और उस कंटेनर को चलाना, जबकि यह सुनिश्चित किया जाता है कि बंद होने के बाद इसे फिर से चालू किया जाए।

कंटेनर छवि बनाएँ

मान लें कि आपका एप्लिकेशन उस सर्वर पर / home / me / my-app में उपलब्ध है, इस फ़ोल्डर के समान सामग्री के साथ फ़ोल्डर / होम / me / my-app में एक पाठ फ़ाइल Dockerfile बनाएं :

FROM node:lts-alpine
COPY /my-app /app
CMD ["/app/server.js"]

इस तरह कमांड का उपयोग करके छवि बनाएं:

docker build -t myapp-as-a-service /home/me

नोट: अंतिम पैरामीटर उस फ़ोल्डर का चयन कर रहा है जिसमें Dockerfile के बजाय खुद Dockerfile है। आप विकल्प -f का उपयोग करके एक अलग चुन सकते हैं ।

कंटेनर शुरू करें

कंटेनर शुरू करने के लिए इस कमांड का उपयोग करें:

docker run -d --restart always -p 80:3000 myapp-as-a-service

यह कमांड मान रहा है कि आपका ऐप पोर्ट 3000 पर सुन रहा है और आप चाहते हैं कि यह आपके होस्ट के पोर्ट 80 पर उजागर हो।

यह सुनिश्चित करने के लिए एक बहुत ही सीमित उदाहरण है, लेकिन यह एक अच्छा प्रारंभिक बिंदु है।


0

यदि आप pm2 का उपयोग कर रहे हैं, तो आप इसे autorestartसेट के साथ उपयोग कर सकते हैं false:

$ pm2 पारिस्थितिकी तंत्र

यह एक नमूना उत्पन्न करेगा ecosystem.config.js:

module.exports = {
  apps: [
    {
      script: './scripts/companies.js',
      autorestart: false,
    },
    {
      script: './scripts/domains.js',
      autorestart: false,
    },
    {
      script: './scripts/technologies.js',
      autorestart: false,
    },
  ],
}

$ pm2 इकोसिस्टम शुरू करें ।config.js


-1

यह उत्तर पार्टी के लिए काफी देर से है, लेकिन मैंने पाया कि सबसे अच्छा समाधान एक शेल स्क्रिप्ट लिखना था जो दोनों screen -dmSऔर nohupआदेशों का उपयोग करता था ।

screen -dmS newScreenName nohup node myserver.js >> logfile.log

मैं >> logfileअंत में भी थोड़ा जोड़ता हूं ताकि मैं नोड console.log()स्टेटमेंट को आसानी से बचा सकूं ।

मैंने शेल स्क्रिप्ट का उपयोग क्यों किया? अच्छी तरह से मैं भी अगर एक बयान है कि यह देखने के लिए जाँच की कि node myserver.jsप्रक्रिया पहले से ही चल रहा था में जोड़ा ।

इस तरह से मैं एक एकल कमांड लाइन विकल्प बनाने में सक्षम था जो दोनों मुझे सर्वर को चालू रखने की अनुमति देता है और जब मैंने बदलाव किया है तब भी इसे पुनः आरंभ करता है, जो विकास के लिए बहुत सहायक है।


2
मैं इस समस्या में चला गया हूँ और लिनक्स के लिए बहुत नया हूँ। आप इसे स्क्रीन या नूप के बिना कैसे करेंगे?
क्रेग नॉर्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.