हमेशा के लिए अजीब व्यवहार, मार, अपाचे और php


4

मैं कुछ नोड के साथ स्क्रिप्ट चला रहा हूँ 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 उपयोगकर्ता?


वह तो बस ... अजीब है। मुझे लगता है कि अनुमतियों की बात आती है तो सिवाय php का थोड़ा अलग वाक्यविन्यास है।
Virusboy

इसका अलग शब्द है।
Virusboy

प्रक्रिया की जानकारी के लिए फॉरएवर को एक स्टोर की आवश्यकता होती है। आम तौर पर यह है ~/.forever/। हो सकता है कि (जंगली अनुमान यहाँ) www-data में एक homedir कॉन्फ़िगर नहीं किया गया है, इसलिए यह रूट के homedir को प्रभावित करता है? आपके www-data उपयोगकर्ता के लिए होमडेयर क्या है (कोशिश करें: getent passwd www-data | cut -d: -f6 )? क्या आप config.json का उपयोग करते हैं और क्या इस व्यवहार के कुछ सुराग हैं?
agtoever

धन्यवाद। www-data का अपना घर dir है, जो है /var/www। यह भी एक .forever वहाँ के साथ मरना, एक के साथ config.json फ़ाइल और सभी चल रही प्रक्रियाओं की फ़ाइलों को लॉग करता है।
Polosson

जवाबों:


3

खैर, आखिरकार मुझे इसका हल मिल गया।

दरअसल, अपाचे ने परेशान किया $HOME पर्यावरण चर, (पंक्ति 4 देखें) /etc/apache2/envvar फ़ाइल: unset HOME )

जोड़ने के लिए केवल एक चीज थी:

export HOME=/var/www

से पहले forever list बैश स्क्रिप्ट में लाइन।

और एक आकर्षण की तरह काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.