2015-08-24 5 views
12

जब मैं pm2 के साथ अपना नोडजेस ऐप शुरू करता हूं, तो अन्य सर्वर उपयोगकर्ता प्रक्रिया तक पहुंच नहीं पा रहे हैं।pm2 कैसे चलाएं ताकि अन्य सर्वर उपयोगकर्ता प्रक्रिया तक पहुंच सकें?

यहां तक ​​कि अगर मैं एक कस्टम निर्देशिका (वर्तमान नहीं उपयोगकर्ता के ~/, क्या PM2 डिफ़ॉल्ट रूप से उपयोग कर रहा है) से PM2 शुरू:

HOME=/var/www pm2 start app.js 

निर्देशिका किसी भी उपयोगकर्ता (~/ करने की तुलना द्वारा पहुँचा जा सकता है, लेकिन वहाँ है अभी भी कोई रास्ता नहीं अन्य सर्वर उपयोगकर्ता प्रक्रिया का उपयोग करने में सक्षम है

अन्य सर्वर उपयोगकर्ता pm2 list करता है, तो वह उसे 0 प्रक्रियाओं चल रहे हैं पता चलता -।। लेकिन वहाँ (किसी अन्य उपयोगकर्ता द्वारा शुरू कर दिया) कर रहे हैं और जब अन्य उपयोगकर्ताकी कोशिश करता है

events.js:72 
    throw er; // Unhandled 'error' event 
     ^
Error: connect EACCES 
    at errnoException (net.js:905:11) 
    at Object.afterConnect [as oncomplete] (net.js:896:19) 

तो मैं कैसे यकीन है कि उन अन्य सर्वर उपयोगकर्ताओं द्वारा चलाए जा PM2 प्रक्रियाओं का उपयोग करने में सक्षम हैं बनाने के लिए सोच रहा हूँ:, CLI एक त्रुटि फेंकता है? या यह अलग से संपर्क किया जाएगा?


मैं सोच रहा हूँ क्यों हर सर्वर उपयोगकर्ता एक Git भंडार से नवीनतम स्रोत कोड को तैनात करने के git pull बनाने के लिए सक्षम है, लेकिन pm2 प्रक्रिया बाद में पुन: प्रारंभ नहीं कर सकते? केवल pm2 प्रक्रिया शुरू करने वाला उपयोगकर्ता इसे पुनरारंभ करने में सक्षम है ... अजीब।

+0

एक pm2 उदाहरण केवल उस उपयोगकर्ता से संबंधित है जिसने इसे शुरू किया। – soyuka

उत्तर

0

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

+0

श्रीनाथ, स्टार्टअप से pm2 शुरू करके आपका क्या मतलब है? सर्वर से शुरू करें? मैं हमेशा एक सीएलआई से pm2 शुरू करता हूं, लेकिन रूट उपयोगकर्ता के रूप में नहीं। हालांकि, एक उपयोगकर्ता के रूप में sudoers समूह में। –

+0

शायद, पिड बदलने के लिए एक तरीका है, तब सॉक फाइल अनुमतियां? तो अन्य उपयोगकर्ता (सूडर्स, यदि यह मायने रखता है) को pm2 प्रक्रियाओं को शुरू करने की अनुमति है? –

+0

मेरा कहना है कि जिस उपयोगकर्ता को चलाने के दौरान त्रुटि संदेश फेंक दिया गया है, उसे pm2 pid फ़ाइलों तक पहुंचने की अनुमति नहीं है। Pm2 विभिन्न उपयोगकर्ता –

5

यहां बताया गया है कि हमने इसे कैसे छोड़ा।

बस एक समूह बनाने के

  • एक नए समूह pm2 या जो भी नाम के लिए काम करता बनाएं आप

    $ groupadd pm2

  • बदलें समूह के लिए /var/www/ फ़ोल्डर समूह स्वामी pm2

    $ chgrp -R pm2 /var/www

  • अन्य उपयोगकर्ता/www जोड़ें, के बॉब कहते हैं, PM2 को

    $ usermod -aG pm2 bob

अब बॉब /var को $ HOME बदलकर PM2 कमांड चलाने कर सकते हैं

$ env HOME=/var/www pm2 list

या (बेहतर अभी भी) एक उपनाम बनाते हैं @jcollum ने

सुझाया

$ alias pm2='env HOME=/var/www pm2'

+0

द्वारा शुरू किया गया है यह मेरे लिए काम करता है। दूसरी बात यह है कि पीएम 2 को उपनाम करना ताकि 'एनवी होम' सभी pm2 कॉल में शामिल किया गया हो। – jcollum

4

ऐसा लगता है कि PM2 उपयोगकर्ता की '~/.pm2' फ़ोल्डर के अंतर्गत डेटा की बचत होती है, तो अन्य उपयोगकर्ताओं की PM2 स्थिति 'के साथ अपने PM2 प्रक्रिया नहीं देख सकता।

मैं PM2 के लिए एक नया linux उपयोगकर्ता बनाया, और सभी उपयोगकर्ताओं PM2 प्रक्रिया शुरू करने से पहले 'सु pm2user' का उपयोग करें:

$ sudo su pm2user 
$ sudo pm2 start app.js 

यह एक बेवकूफ तरीका है, लेकिन यह आसान है और अच्छी तरह से काम करता है। उम्मीद है कि यह मदद करेगा :)

1

मान लें कि आप pm2 को www-data के रूप में चलाते हैं। उस pm2 उदाहरण तक पहुंचने के लिए, मैं करता हूं: उदाहरण के लिए sudo -u www-data HOME=/var/www pm2 list। आप, निश्चित रूप से, एक स्क्रिप्ट बना सकते हैं (उदा। supm2) जो आपके लिए ऐसा करता है ताकि आप इसके बजाय supm2 list कर सकें।

3

ठीक है, यहाँ एक ही समस्या के लिए मेरे समाधान है:

  1. PM2 होम निर्देशिका बनाएँ: sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
  2. PM2 के लिए सभी आवश्यक उपयोगकर्ताओं को जोड़ें: sudo mkdir /opt/pm2
  3. उपयोगकर्ता PM2 बनाएं समूह: sudo usermod -aG <username>
  4. स्वामी सेट करें की /opt/PM2: sudo chown pm2:pm2 /opt/pm2
  5. अनुमतियां बदलें: sudo chmod 770 /opt/pm2
  6. सेट वातावरण चर (मैं /etc/पर्यावरण उपयोग कर रहा हूँ): sudo npm install pm2 -g: PM2_HOME=/opt/pm2
  7. PM2 को स्थापित करें।मेरा npm उपसर्ग/usr/स्थानीय पर सेट है।
  8. रन sudo pm2 startup। यह आपके सिस्टम के लिए स्टार्टअप स्क्रिप्ट उत्पन्न करेगा (मेरे मामले में यह उबंटू सर्वर है)।
  9. ओपन स्टार्टअप स्क्रिप्ट और संपादित निम्न चर USER=pm2 ... export PM2_HOME="/opt/pm2"

मेरी रास्पबेरी पीआई मैं के साथ इस मुद्दे मिल गया में (फिर से, मेरे मामले में यह /etc/init.d/pm2-init.sh है) सॉकेट फ़ाइल अनुमति विरासत, वे केवल पढ़ने के लिए rwx के बजाय समूह के लिए निर्धारित कर रहे हैं घर dir करने के लिए लागू किया जाता है: srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

googling मैं अंत में समाधान के घंटे के बाद: मैं स्टार्टअप स्क्रिप्ट में निम्न पंक्ति कहा: umask 0002 और इसे मिला: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

सब कुछ है।

+0

क्या 'PM2_HOME' चर को इंस्टॉलेशन से पहले सेट करने की आवश्यकता है? मैं पहले से ही pm2 स्थापित कर चुका हूं और पुनः स्थापित करने से बचना चाहता हूं ... –

+0

आप इसे किसी भी समय चिह्नित कर सकते हैं, मार्क। यह सिर्फ पीएम 2 की होम निर्देशिका को इंगित करता है। –

+0

केवल एक समस्या जो मैंने पाया है, हर बार pm2 सेवा पुनरारंभ होता है, यह बहुत महत्वपूर्ण pub.sock और rpc.sock फ़ाइलों को फिर से लिख देगा और आप सेट की गई 770 पहुंच खो देंगे। इन फ़ाइलों को हर पुनरारंभ करने के लिए chmodded की जरूरत है। – Nicholi

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