我遇到了奇怪的错误,从一天起就试图找出答案,却毫无头绪。
我在
/home/myname/script.php
有一个脚本,其中包含
<?php
while(True) {
echo "You said: ".$argv[1];
sleep(5);
}
当我像这样直接在终端上运行时:
/usr/bin/php /home/myname/script.php hello
我得到了预期的输出,并且脚本没有停止。但如果我这样做
/usr/bin/php /home/myname/script.php hello &
它立即停止,而不是像这样在后台运行。
[1]+ Stopped /usr/bin/php /home/myname/script.php hello
有什么想法吗?
使用
nohup /usr/bin/php /home/myname/script.php hello &
.
要验证,您可以将输出重定向到
nohup /usr/bin/php /home/myname/script.php hello > log.txt &
用途:
nohup php file.php &
或避免将输出发送到 nohup.out
nohup php file.php &> /dev/null
要在没有 nohup 的情况下在后台运行它,请输入:
<?php
ignore_user_abort(1);
在 php 代码的开头。
默认情况下,当用户中止它时(无论是在服务器上还是在终端上运行),php 文件将终止,并将其放在后台以某种方式使它认为它已被中止。
还有:
set_time_limit(0);
如果您的 php.ini 设置中设置了 max_execution_time 限制,将保持其运行
请注意,内存问题等其他因素可能会导致脚本终止,在这种情况下,最好使用 nohup。