मैं अपने ऐप की तैनाती के लिए .sh स्क्रिप्ट का उपयोग करना चाहता हूं। वह स्क्रिप्ट मेरे होम सर्वर (Ubuntu 15.10 सर्वर) पर है, जिसे निष्पादन योग्य के रूप में चिह्नित किया गया है। इस स्क्रिप्ट तक पहुंच ssh के माध्यम से की जाती है, इस ट्यूटोरियल का उपयोग करके , मैंने ssh लॉगिन सेट किया है, जो उस स्क्रिप्ट को चलाता है। इसलिए मूल रूप से मैं सिर्फ कॉल करता हूं ssh deployer@XXX.com someArguments
और यह मेरी स्क्रिप्ट someArguments
को मापदंडों के रूप में चलाता है । उपयोगकर्ता के deployer
पास uid = 0 है, इसलिए इसका मूल रूप से root
(इसे भविष्य में बदल दिया जाएगा, मैंने इसे केवल अनुमतियों की समस्याओं को समाप्त करने के लिए सेट किया है जब तक कि यह ठीक काम न करे)।
और यहां वह जगह है जहां चीजें मुश्किल हो जाती हैं। /usr/bin/env: php: No such file or directory
कमांड पर स्क्रिप्ट रिपोर्ट /bin/composer install
( संगीतकार का उपयोग करके )। चीजें और अधिक अजीब हैं जितना अधिक मैं उस स्क्रिप्ट को देखता हूं। इस लाइन से पहले, वहाँ भी कहा जाता है /bin/composer self-update
और /bin/composer -V
, जो दोनों सही ढंग से चलता है और सही आउटपुट प्रदर्शित करता है।
मैंने निम्नलिखित चीजों की जाँच की है:
/usr/bin/env php -v
सही PHP संस्करण प्रदर्शित करता है (जैसा कि/usr/bin/php -v
)whereis php
प्रदर्शित करता हैphp: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gz
php5-cli
पैकेज स्थापित और नवीनतम संस्करण है$PATH
शामिल/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
which env
प्रदर्शित करता है/usr/bin/env
मैंने निम्नलिखित चीजों को भी आजमाया है:
- स्क्रिप्ट को
bash deploy.sh
रूट के तहत सीधे चलाना (चूंकि यह उस उपयोगकर्ता के समान है) - त्रुटियों के बिना पूरी तरह से काम करता है - फेलिंग कमांड सीधे - बिना त्रुटियों के भी पूरी तरह से चल रहा है
तो यह मुझे बहुत विशिष्ट मामला लगता है, यह कमांड काम क्यों नहीं करता है। मैंने इसे डिबग करने के 12 घंटे बिताए और मैं यहां विचारों से बाहर हूं।
PS: इसी तरह की त्रुटि ( /usr/bin/env: node: No such file or directory
) तब होती है जब bower install
( बोवर का उपयोग करते हुए ) होती है , लेकिन नहीं चलने पर npm install
( एनपीएम का उपयोग करके )।
sh deploy
और bash deploy
दोनों एक ही परिणाम देता है
/usr/bin/env > environment.txt
sh deploy
बजायbash deploy
(शायद कुछ बैशिज़्म) चलाएं। आपने " निम्नलिखित चीजों " की जांच कैसे की ? मैं उन्हें स्क्रिप्ट में जांचने की सलाह देता हूं, ताकि आप एनवीएस के अंतिम ओवरराइड और स्वच्छता की खोज कर सकें।