मैं कुछ नोड के साथ स्क्रिप्ट चला रहा हूँ forever।
मैंने उन्हें शुरू किया www-data उपयोगकर्ता (यानी ssh लॉगिंग के माध्यम से www-data @ सर्वर और टाइपिंग के रूप में forever start myapp.js, आदि।)।
ठीक है, सब कुछ एक आकर्षण की तरह होता है; मेरा आवेदन उम्मीद के मुताबिक काम करता है, और टाइपिंग forever list मुझे चल रही प्रक्रियाओं को दिखाता है।
फिर, मैंने एक (बहुत ही सरल) स्क्रिप्ट लिखी foreverList.sh और फ़ोल्डर में रखा गया /var/www/scripts/ :
#!/bin/bash
echo "checking running node.js scripts:"
forever list
जब मैं स्क्रिप्ट को शेल से निष्पादित करता हूं www-data उपयोगकर्ता, यह काम करता है। यहां कुछ भी नहीं फैंसी। लेकिन, इस स्क्रिप्ट का उपयोग Apache 2.4 के माध्यम से PHP 5.6 के साथ किया जाना है:
<?php
// ....
$resp_script = shell_exec("/var/www/scripts/foreverList.sh 2>&1");
echo "<pre>$resp_script</pre>";
और जब मैं इसे अपने वेब ब्राउजर के माध्यम से निष्पादित करता हूं (तो ऊपर PHP कोड के साथ), यह काम नहीं करता है !! मैंने इसे प्राप्त किया forever त्रुटि संदेश (नोडज, php नहीं):
/usr/lib/node_modules/forever/lib/forever.js:674
procs.forEach(function (proc) {
^
TypeError: Object Error: EACCES, permission denied '/root/.forever/sock' has no method 'forEach'
...
... #(stack trace follows)
मुझे वास्तव में यह समझ में नहीं आता है कि यह / रूट फ़ोल्डर के साथ क्यों व्यवहार करता है, क्योंकि मैं यह सब सामान / var / www / फ़ोल्डर से चला रहा हूँ और के रूप में www-data उपयोगकर्ता (जोड़ा गया whoami स्क्रिप्ट में यह जाँचने के लिए मामला था, और यह करता है)।
क्या मुझे कुछ याद है? क्या यह हमेशा के लिए बग है?
किसी भी प्रकार के मदद की बहुत सराहना की जाएगी।
अद्यतन करें : मैंने जोड़ने की कोशिश की echo $HOME बैश स्क्रिप्ट में, और यह कुछ भी नहीं लौटाता है। क्या PHP अपने आप में होम पाथ इन्वायरमेंट वैरिएबल को मिटा देता है www-data उपयोगकर्ता?
~/.forever/। हो सकता है कि (जंगली अनुमान यहाँ) www-data में एक homedir कॉन्फ़िगर नहीं किया गया है, इसलिए यह रूट के homedir को प्रभावित करता है? आपके www-data उपयोगकर्ता के लिए होमडेयर क्या है (कोशिश करें: getent passwd www-data | cut -d: -f6 )? क्या आप config.json का उपयोग करते हैं और क्या इस व्यवहार के कुछ सुराग हैं?
/var/www। यह भी एक .forever वहाँ के साथ मरना, एक के साथ config.json फ़ाइल और सभी चल रही प्रक्रियाओं की फ़ाइलों को लॉग करता है।