運行一個腳本,將錯誤附加到檔案並使用 nohup

運行一個腳本,將錯誤附加到檔案並使用 nohup

腳本有效!

首先,我在 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 檔案中修復此問題,但目前可以...

相關內容