2015-10-26 9 views
6

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

मैंने नोड संस्करण प्रबंधक एनवीएम का उपयोग करके नोड और pm2 स्थापित किया है।

ssh [email protected] 'source /home/pi/.bashrc; cd project; pm2 restart app.js -x -- --prod'0 min 3 sec 
bash: pm2: command not found 

मैं भी जोड़ लिया है:

shopt -s expand_aliases मेरी bashrc के तल में, लेकिन यह मदद नहीं करता है।

मैंने तैनाती करने के बाद इसे अपने एप्लिकेशन को पुनरारंभ कैसे कर सकता हूं? आपकी ऋषि सलाह और बेहतर ज्ञान के लिए अग्रिम धन्यवाद!

संपादित करें 1: मेरी .bashrc http://pastie.org/10529200 मेरे $ पथ: /home/pi/.nvm/versions/node/v4.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

संपादित 2: मैं /home/pi/.nvm/versions/node/v4.2.0/bin/pm2 जोड़ा जो PM2 का पूर्ण पथ है और अब मैं निम्नलिखित त्रुटि मिलती है: /usr/bin/env: node: No such file or directory

ऐसा लगता है कि अगर मैं पूरा पथ प्रदान करता हूं, तो नोड निष्पादित नहीं होता है।

+0

'एक उपनाम pm2' है? यदि ऐसा है तो यह शायद काम नहीं करेगा। इसे संभालने और उस स्क्रिप्ट को निष्पादित करने के लिए एक स्क्रिप्ट लिखना बेहतर है। इसके अलावा आपके पास एसएसएच कमांड एक खोल में चल रहा है, हालांकि यह एक अच्छी धारणा नहीं है। शायद आपके एसएसएच कमांड को '"/ bin/bash -c' स्रोत के साथ शुरू करें .... '' 'जो ऊपर एक स्क्रिप्ट टिप्पणी लिखने के लिए वापस ले जाता है। अंत में, क्या 'pm2' कमांड को tty की आवश्यकता होती है? '-t' विकल्प के साथ एक टीटी आवंटित नहीं किया जाएगा। कुछ कार्यक्रम मानते हैं कि आपके पास एक उदाहरण है, जिसे आमतौर पर आपके द्वारा प्रदान किए गए उदाहरण के विपरीत एक इंटरैक्टिव खोल से निष्पादित किया जाता है। – Sukima

+0

सुझाव के लिए धन्यवाद, दुख की बात है कि इससे कोई फर्क नहीं पड़ता। आपने जो सुझाव दिया है उसका प्रयास किया, और यहां तक ​​कि '/ bin/bash -c "nvm भी 4.2.0" 'node को प्रयोग करने और सक्षम करने के लिए जोड़ा गया। दुर्भाग्य से यह काम नहीं करता है। '/ bin/bash: nvm: कमांड नहीं मिला /bin/bash: pm2: कमांड नहीं मिला – Ms01

+0

शायद समाधान एनवीएम जैसे संस्करण प्रबंधक का उपयोग करने के बजाय नोड स्थापित करना है? मैं काम करने के लिए एनवीएम होने का पक्ष लेगा क्योंकि यह बहुत आसान स्विचिंग संस्करण है। – Ms01

उत्तर

8

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

जब कोई एसएसएच सत्र एक खोल को जन्म देता है तो यह अंतःक्रियात्मक रूप से काम करने के लिए उपयुक्त वातावरण बनाने के लिए बहुत सारे गुर्दे से गुजरता है। लॉगिन प्रक्रिया से विरासत की तरह चीजें, /etc/profile पढ़ना, ~/.profile पढ़ना। लेकिन उन मामलों में जहां आपका निष्पादन बैश सीधे यह हमेशा गारंटी नहीं है। वास्तव में $PATH पूरी तरह खाली हो सकता है।

जब /usr/bin/env node निष्पादित करता है तो यह आपके $PATH में नोड की तलाश करता है जो एक गैर-इंटरैक्टिव खोल में कुछ भी खाली या खाली हो सकता है।

अधिकांश सिस्टमों में डिफ़ॉल्ट PATH=/bin:/usr/bin आमतौर पर /usr/local/bin डिफ़ॉल्ट वातावरण में शामिल नहीं है।

आप ssh … '/bin/bash -l -c "…"' का उपयोग कर एसएसएच के साथ लॉगिन करने का प्रयास कर सकते हैं।

तुम भी सर्वर जानता है कि कैसे पर्यावरण जब एक इंटरैक्टिव खोल के बाहर मार डाला जाना चाहिए पर एक विशेष स्क्रिप्ट लिख सकते हैं:

#!/bin/bash 
# Example shell script; filename: /usr/local/bin/my_script.sh 
export PATH=$PATH:/usr/local/bin 
export NODE_PATH=/usr/local/share/node 
export USER=myuser 
export HOME=/home/myuser 
source $HOME/.nvm/nvm.sh 
cd /usr/bin/share/my_script 
nvm use 0.12 
/usr/bin/env node ./script_name.js 

तब ssh के माध्यम से इसे कहते: ssh … '/usr/local/bin/my_script.sh'

इन विचारों से परे मुझे नहीं पता कि आगे कैसे मदद करें।

5

तरह Sukima कहा, संभावना है कि यह एक ऐसा माहौल समस्या के कारण होती है - एक सर्वर में SSH'ing एक पूर्ण वातावरण की स्थापना नहीं करता है। हालांकि, आप इसका उपयोग करके अपने आदेश की शुरुआत में बस/etc/प्रोफ़ाइल को कॉल करके इसे अधिक से अधिक प्राप्त कर सकते हैं।ऑपरेटर (जो "स्रोत" कमांड के समान है):

ssh [email protected] '. /etc/profile ; cd project; pm2 restart app.js -x -- --prod' 

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

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