मैं पृष्ठभूमि में PHP प्रक्रियाओं को चलाने की कोशिश करता हूं और इसे एक php फ़ाइल से शुरू करता हूं।nohup: पृष्ठभूमि में PHP प्रक्रिया चलाएं
कुछ सूचनाएं: PHP संस्करण 5.2.17, php safe_mode बंद है, लिनक्स सिस्टम। मैं exec के साथ प्रक्रिया शुरू करता हूं, पहले से ही shell_exec कोशिश की। मैं 0755 के लिए सभी फ़ाइलों को निर्धारित करते हैं, 0777.
$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!");
तो मैं इस बयान प्रिंट, मैं इस मिलता है और पीआईडी ठीक है:
nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $!
तो मैं
top
साथ ssh के तहत प्रक्रियाओं के लिए देखो
मैं सही पीआईडी के साथ मेरी php5 प्रक्रिया देखता हूं। उपयोगकर्ता जड़
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3533 xxxxxxxx 20 0 21356 8868 4580 S 0 0.4 0:00.13 php5
3536 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3539 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3542 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3545 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3548 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3551 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
है अगर मैं प्रक्रिया मैनुअल शीर्ष इस तरह दिखता है शुरू:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8141 xxxxxxxx 22 2 24048 9.9m 5344 S 10 0.5 0:00.31 php5
समस्या: यह कुछ भी नहीं happens.To डिबग एक छोटा सा मैं में एक उत्पादन लिखा था की तरह लगता है फ़ाइल
ob_start();
echo "STARTING...";
writeLog(ob_get_contents());
//...
function writeLog($info){
$handle = fopen("file.log", "a+");
fwrite($handle, $info);
fclose($handle);
}
exit;
मेरी फ़ाइल में कोई लॉग नहीं है। अगर मैं अपने ब्राउज़र में यह फ़ाइल शुरू करता हूं, तो यह सही ढंग से प्रक्रिया करता है और "डीबगिंग" जानकारी के साथ मेरी file.log प्राप्त करता है।
यह ब्राउज़र में क्यों काम कर रहा है और exec/shell_exec कमांड पर नहीं ?? मेरे पास सही पीआईडी के साथ वास्तव में इन PHP प्रक्रियाएं हैं, लेकिन कोई परिणाम नहीं है।
धन्यवाद मदद के लिए बहुत कुछ!
आपको पहले उस स्क्रिप्ट के लिए एक पूर्ण पथ प्रदान करने का प्रयास करना चाहिए जिसे आप निष्पादित करने का प्रयास कर रहे हैं, न कि एक रिश्तेदार जैसा कि आप अब ऐसा कर रहे हैं। अर्थात। 'नोहुप/usr/local/bin/php5 /absolute/path/to/file.php>/dev/null 2>/dev/null और echo $ का उपयोग करें!' – wimvds
मेरे पास इस फ़ाइल का पूर्ण पथ है। मैं एसएसएच में प्रत्येक निर्देशिका से यह नोहप शुरू कर सकता हूं। यह काम कर रहा है। दुर्भाग्य से php के साथ नहीं। – stoe
फिर यह एक अनुमति समस्या हो सकती है। तो अपने लॉग (अपाचे, PHP त्रुटि लॉग, कंसोल लॉग) की जांच करें ... यदि आप AppArmor/SELinux चला रहे हैं तो परीक्षण करने के लिए इसे बंद करने का प्रयास करें यदि आपको इन पृष्ठभूमि कार्यों को अनुमति देने के लिए अपनी सुरक्षा नीति को बदलने की आवश्यकता है। – wimvds