डेमॉन प्रक्रिया के रूप में एक नोड.जेएस सर्वर कैसे शुरू करता है?


83

पायथन ट्विस्टेड में, आपके पास twistdकमांड है जो आपको अपने एप्लिकेशन को चलाने से संबंधित कई चीजों में मदद करता है (उदाहरण के लिए इसे निष्क्रिय करें)।

आप एक नोड.जेएस सर्वर को कैसे निष्क्रिय करते हैं ताकि यह चालू सत्र बंद होने के बाद भी चल सके?

आपकी सहायता के लिए धन्यवाद


जवाबों:


92

हमेशा के लिए आपके सवाल का जवाब है।

इंस्टॉल

$ curl https://npmjs.org/install.sh | sh
$ npm install forever
# Or to install as a terminal command everywhere:
$ npm install -g forever

प्रयोग

कमांड लाइन से फॉरएवर का उपयोग करना

$ forever start server.js

Node.js से हमेशा के लिए एक उदाहरण का उपयोग करना

var forever = require('forever');

  var child = new forever.Forever('your-filename.js', {
    max: 3,
    silent: true,
    args: []
  });

  child.on('exit', this.callback);
  child.start();

7
विश्व स्तर पर स्थापित करने के लिए -g विकल्प का उपयोग करना चाहिए। ऐसा करने के लिए अनुमति की आवश्यकता हो सकती है।
रेफेलियो

1
जब आप रिबूट करते हैं तो क्या होता है?

1
@AlexBrown - यदि आप रिबूट से बचना चाहते हैं, तो आपको forever start server.jsएक स्टार्टअप स्क्रिप्ट (जैसे rc.local) से जोड़ना होगा ।
12/15

3
मैं अंततः मोनिट का उपयोग करने और हमेशा के लिए प्रक्रिया को रोकने के लिए बस गया।

7
हमेशा के लिए मर गया, pm2 नया राजा है। कृपया अपना समय हमेशा के लिए बर्बाद न करें। मैंने अभी-अभी स्विच किया है और मैं उड़ गया हूं। pm2 एक सरल के साथ सभी कोर पर अपने एप्लिकेशन को संतुलित कर सकता है। pm2 start app.js -i 0 --name "myapp" ... WOW ... इसे आज़माएं और आप हमेशा के लिए पीछे नहीं हटेंगे ... देखें @ गैरी बर्निट्ज का जवाब
danday74

45

यदि आपको अपनी प्रक्रिया को स्वयं को निष्क्रिय करने की आवश्यकता है, तो हमेशा के लिए रिले करने की आवश्यकता नहीं है - आप डेमनीज मॉड्यूल का उपयोग कर सकते हैं ।

$ npm install daemonize2

फिर उदाहरण के रूप में अपनी सर्वर फ़ाइल लिखें:

var daemon = require("daemonize2").setup({
    main: "app.js",
    name: "sampleapp",
    pidfile: "sampleapp.pid"
});

switch (process.argv[2]) {

    case "start":
        daemon.start();
        break;

    case "stop":
        daemon.stop();
        break;

    default:
        console.log("Usage: [start|stop]");
}

ध्यान रखें, यह एक निम्न स्तर का दृष्टिकोण है।


2
यह 'डेमन के रूप में नोड.जेएस सर्वर को कैसे शुरू करें' सवाल के अधिक सही उत्तर की तरह लगता है।
श्याम हबरकड़ा

2
आप app.js में क्या डालते हैं? यह मेरे लिए अभी बाहर निकलता है।
chovy

1
रिबूट पर क्या होता है?
मिश्रणदेव

case 'restart': daemon.on('stopped', () => { daemon.start(); }); daemon.stop(); break;
davidhq

23

systemdसेवा प्रबंधक डेमॉन शुरू करने के लिए , सेवा फ़ाइल लिखें। उदाहरण के लिए, एक फ़ाइल बनाएँ /etc/systemd/system/myservice.service

[Unit]
Description=myservice-description
After=network.target

[Service]
ExecStart=/opt/myservice-location/src/node/server.js --args=here
Restart=always
User=me
Group=group
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/opt/myservice-location

[Install]
WantedBy=multi-user.target

Myservice.service फ़ाइल में हर परिवर्तन के बाद सेवा प्रबंधक डेमन को अपडेट करना याद रखें।

$ systemctl daemon-reload

इसके बाद सेवा चालू करें और सेवा को बूट पर शुरू करने के लिए सक्षम करें।

$ systemctl start myservice
$ systemctl enable myservice

1
आप इस मामले में server.js के लिए अतिरिक्त तर्क कहाँ रखते हैं?
निकिता फुच्स

19

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

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

https://github.com/unitech/pm2

http://pm2.io

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

2
हमेशा के लिए मर गया, pm2 राजा है! मैं हमेशा से हमेशा के लिए उपयोग कर रहा हूं, लेकिन बस pm2 पर स्विच कर दिया। वाह! वाह! वाह! हमेशा अपने ऐप को 1 कोर पर चलाता है, pm2 वही कर सकता है या यह आपके एप्लिकेशन को सभी उपलब्ध कोर पर लोड कर सकता है। वाह! @reboot क्रॉन जॉब्स की कोई आवश्यकता नहीं है, बस pm2 स्टार्टअप (pm2 को सिस्टमड या OS समतुल्य सेवा के रूप में शुरू करने के लिए) करें और फिर pm2 सेव करें। अब रिबूट और आपके ऐप्स अभी भी चल रहे हैं। आप pm2 शो के साथ एक रनिंग ऐप की स्थिति प्राप्त कर सकते हैं। घड़ी आसानी से उपलब्ध है। वाह! अविश्वसनीय वाह!
danday74

Openhift में गैर-रूट उपयोगकर्ता के लिए pm2 को सेट करना बहुत अधिक दर्द है।
कार्तिक १०

12

सबसे सरल तरीका सिर्फ पृष्ठभूमि को कमांड भेजना होगा।

$ node server.js &

फिर आप बाद में प्रक्रिया को मार सकते हैं। मैं आमतौर पर निम्नलिखित कार्य करता हूं:

$ killall node

नोट : मैं OS X चला रहा हूं।


50
ध्यान दें कि यदि आप अपने टर्मिनल / ssh सत्र से बाहर जाते हैं तो यह काम नहीं करेगा। उस के लिए पूर्ण समाधान है nohup नोड server.js> / dev / null 2> & 1 &
माइकल डिलन

@MichaelDillon आपको ऐसा क्यों लगता है कि आउटपुट को पुनर्निर्देशन /dev/nullको पूर्ण समाधान में शामिल किया जाना चाहिए?
नुरेटिन

6

तुम कोशिश कर सकते हो:

$ nohup node server.js &

यह मेरे लिए मैक और लिनक्स पर काम करता है।

आउटपुट ./nohup.outफाइल में होगा

लेकिन मैं अभी भी आपको उपयोग करने की सलाह देता हूं pm2या forever, क्योंकि वे आसानी से पुनः आरंभ करने, रोकने और लॉग करने के लिए उपयोग किए जाते हैं।


3

अधिक उन्नत सामान्य प्रयोजन धावक हैं, जैसे monitऔर runit


0

POSIX सिस्टम पर डैमेज करने के सामान्य तरीके की पृष्ठभूमि के लिए आप C विधि खोज सकते हैं।

मैंने नोड तरीके से एपीआई को पर्याप्त तरीके से नहीं देखा है, इसे हाथ से सी तरीका करने की अनुमति देने के लिए। हालाँकि, जब आप child_process का उपयोग कर रहे हैं, तो आपके लिए यह नोड हो सकता है।

http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

मैं इसे समय की संभावित बर्बादी मानता हूं क्योंकि एक अच्छा मौका है जो आपके सिस्टम को समान प्रदान करता है।

उदाहरण के लिए:

http://libslack.org/daemon/manpages/daemon.1.html

यदि आप कुछ पोर्टेबल (क्रॉस प्लेटफॉर्म) चाहते हैं, तो अन्य पोस्ट उन समाधानों की पेशकश करते हैं जो पर्याप्त हो सकते हैं।

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