2016-07-04 19 views
12

मैंने अपने centOS 7 सर्वर पर node.js और npm स्थापित किया। लेकिन मुझे pm2 के साथ समस्या है। असल में वास्तविक समस्या यह है कि मेरे पास लिनक्स में अनुभव नहीं हैं और मुझे नहीं पता कि पथ कैसे बदलें। यहां फ़ोल्डर संरचना है।पीएम 2 कमांड नहीं मिला

* bin 
* code 
* error_docs 
* httpdocs 
* lib64 
* logs 
* tmp 
* var 
* chat(my node.js folder) 
    * node_modules 
     * pm2 
     * sockjs 
    * server.js 
* dev 
* etc 
* lib 
* local 
* sbin 
* usr 

मैं cd chat टाइप करके फ़ोल्डर में प्रवेश किया और npm install pm2 साथ PM2 स्थापित।

इसके बाद मैंने pm2 server.js सर्वर टाइप करके मेरे सर्वर.जेएस के लिए pm2 का उपयोग करने का प्रयास किया "pm2 कमांड नहीं मिला"। मैं बिना किसी समस्या के node.js का उपयोग कर सकता हूं लेकिन pm2 काम नहीं कर रहा है।

मैं इसे कैसे हल कर सकता हूं?

उत्तर

25

विश्व स्तर पर PM2 स्थापित करें:

रूट के रूप में चलाने के लिए:

npm i -g pm2 

या यदि उपयोगकर्ता sudo-er

sudo npm i -g pm2 

है और उसके बाद उपयोगकर्ता के लिए वापस जाओ (या रूट में रहने अगर यह रूट उपयोगकर्ता द्वारा बनाया गया था) और इसे चलाएं:

pm2 start server.js 
+1

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

+1

क्या हम पीएम 2 का उपयोग कर उत्पादन मोड के लिए निर्माण कर सकते हैं? – Deep

+1

@ दीपकाकर वास्तव में pm2 nodejs ऐप प्रक्रियाओं को चलाने/निगरानी के लिए पैकेज है। आप बिल्ड टूल्स की तलाश में हैं, इसलिए एक नज़र डालें: वेबपैक, गल्प, ग्रंट जो तैनाती/पैकेजिंग के automatization को करते हैं। पीएम - प्रक्रिया प्रबंधक के लिए खड़ा है, पैकेज प्रबंधक नहीं। – num8er

3

पीएम 2 नोड.जेएस अनुप्रयोगों के लिए प्रोसेस मैनेजर। पीएम 2 मूल रूप से अनुप्रयोगों का प्रबंधन करता है (उन्हें पृष्ठभूमि में एक सेवा के रूप में चलाएं)। तो यह है कि हम कैसे sudo अनुमति के साथ विश्व स्तर पर PM2 स्थापित खाता

sudo npm install -g pm2 

जी विकल्प, विश्व स्तर पर मॉड्यूल स्थापित करने के लिए NPM बताता है इतना है कि यह उपलब्ध सिस्टम-वाइड है। एक बार यह स्थापित किया गया है, के रूप में स्थापित पथ की जाँच करें:

whereis pm2 
pm2: /opt/node/bin/pm2 /opt/node/lib/node_modules/pm2/bin/pm2 

अब, हम स्टार्टअप बैश स्क्रिप्ट में इस पथ जोड़ने की जरूरत है। ~/.bashrc फ़ाइल में कहीं भी निम्न पंक्ति जोड़ें जोड़ें।

export PATH=$PATH:/opt/node/lib/node_modules/pm2/bin 

अब फिर से प्रवेश या बैश स्क्रिप्ट स्रोत के रूप में इस प्रकार है (ताकि बैश स्क्रिप्ट चलाता है और पथ सेट कर दिया जाता)

source ~/.bashrc 

और अब यह चलाने चाहिए। pm2

pm2 status 
+1

'.bashrc' के लिए अपना रास्ता जोड़ने की आवश्यकता नहीं है, cuz जब आप इसे इंस्टॉल करते हैं, तो यह निष्पादन योग्य फ़ाइल '/ usr/bin/pm2' या' usr/local/bin/pm2' बनाता है। हो सकता है कि किसी अन्य वितरक में यह वहां नहीं डालता है, या शायद स्रोतों से संकलित करने के बाद आप करना भूल गए हैं: 'इंस्टॉल करें' या आपने सभी परिणाम मैन्युअल रूप से '/ opt/node' पर कॉपी कर दिए हैं। इसलिए इस मामले में ऐसा क्यों न करें: 'सुडो एलएन-एस/ऑप्ट/नोड/बिन/pm2/usr/bin/pm2' – num8er

+1

धन्यवाद @ num8er, मैं इसे आजमाउंगा। अच्छा स्पष्टीकरण हालांकि :-) – Nicks

0

पीएम 2 के साथ पोर्ट 80 का उपयोग करने में त्रुटि की जांच करें?

इस बारे में जाने का गलत तरीका sudo के साथ चलाने का प्रयास कर रहा है।

ऐसा करने का सही तरीका रूट sudo su के रूप में लॉगिन करना होगा, फिर pm2 start app.js --name "whatever" --watch चलाएं।

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

// I use port 80 first.. at this point the script's UID is root. 

app.listen(80); 

// After 2 seconds we switch to UID `azureuser`, which obviously isn't root anymore. 

setTimeout(function() { 
    process.setuid("azureuser"); 
}, 2000); 
+0

ऐसा लगता है कि आप इस प्रश्न को समझ नहीं पाए। (: – num8er

संबंधित मुद्दे