我嘗試在後臺運行php進程,並從一個php文件啓動。nohup:在後臺運行PHP進程
一些信息:PHP版本5.2.17,php safe_mode關閉,linux系統。我用exec啓動進程,已經嘗試shell_exec。我的所有文件設置爲0755,0777
$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!");
如果我打印此聲明,我得到這個和PID是好的:
nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $!
如果我找下SSH與流程
top
我看到我的php5過程正確的PID。用戶是根
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命令?!我有正確的PID這些PHP進程,但沒有結果。
非常感謝您的幫助!
您應該先嚐試提供您嘗試執行的腳本的絕對路徑,而不是像您現在似乎在做的相對路徑。 IE瀏覽器。使用'nohup/usr/local/bin/php5 /absolute/path/to/file.php>/dev/null 2>/dev/null&echo $!' – wimvds 2011-03-13 09:51:30
我有這個文件的絕對路徑。我可以從ssh中的每個目錄啓動nohup。它的工作。不幸的是不使用PHP。 – stoe 2011-03-13 09:58:02
然後它可能是一個權限問題。因此,請檢查您的日誌(Apache,php錯誤日誌,控制檯日誌)......如果您正在運行AppArmor/SELinux,請嘗試關閉它以測試是否需要更改安全策略以允許執行這些後臺任務。 – wimvds 2011-03-13 10:26:09