运行脚本,将错误附加到文件并使用 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你它已经在后台启动了这项工作进程 ID共 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 文件中修复此问题,但现在可以了...

相关内容