
腳本有效!
首先,我在 CLI 中輸入以下內容:php worker.php >>/home/xxx/log 2>&1
然後,我希望它作為自己的進程或其他進程運行,因此我&
在末尾添加一個,如下所示:php worker.php >>/home/xxx/log 2>&1 &
但現在腳本永遠不會執行,因為沒有附加任何內容/home/xxx/log
,並且當我檢查ps -fux
腳本仍然存在時。
我不明白的一件事是,當我運行最後一個命令時,我得到以下資訊:
xxx@xxx:/path$ php worker.php >>/home/xxx/log 2>&1 &
[1] 10659
後來,當我嘗試登出 shell 時,它告訴我:
xxx@xxx:/path$ logout
There are stopped jobs.
[1]+ Stopped php worker.php >> /home/xxx/log 2>&1
這裡發生了什麼事?我想要的只是在後台運行腳本並將所有輸出附加到文件中。
謝謝!
編輯:
這是一個例子。
user@box:~/nohuptest$ vim worker.php
user@box:~/nohuptest$ touch log
user@box:~/nohuptest$ php worker.php >> log 2>&1 &
[1] 31523
user@box:~/nohuptest$ cat log
[1]+ Stopped php worker.php >> log 2>&1
user@box:~/nohuptest$ php worker.php >> log 2>&1 &
[2] 31626
user@box:~/nohuptest$ cat log
[2]+ Stopped php worker.php >> log 2>&1
user@box:~/nohuptest$
user@box:~/nohuptest$ cat worker.php
<?php
echo "hello world\n";
?>
user@box:~/nohuptest$
答案1
我認為一定是有錯字或什麼地方。您所描述的內容應該可以完美運作:
$ cat worker.php
<?
echo "hello world\n"
?>
$ php worker.php >> log 2>&1 &
[1] 16353
$ cat log
hello world
$ php worker.php >> log 2>&1 &
$ cat log
hello world
hello world
您能嘗試這個例子並讓我們知道它是否有效嗎?
只是[1] 16353
告訴bash
您它已在後台啟動了該作業行程編號16353。
答案2
我的猜測是你的程式打開了tty。這樣做的可能不是您,而是 PHP 本身。
嘗試:
php worker.php </dev/null >>/home/xxx/log 2>&1 &
如果這不起作用,您可以隨時在 tmux/screen 中運行它:
tmux [enter]
php worker.php </dev/null >>/home/xxx/log 2>&1
[CTRL-b][d]
您也許也可以使用腳本來運行它:
echo "php worker.php >>/home/xxx/log 2>&1" | script &
答案3
我找到了解決方案。
php script.php [args] </dev/null >>/path/to/log 2>&1 &
PHP 正在等待輸入...我不知道是否可以在 php.ini 檔案中修復此問題,但目前可以...