【问题标题】:PHP script won't run in the backgroundPHP 脚本不会在后台运行
【发布时间】:2023-03-10 17:50:02
【问题描述】:

我正在尝试在后台运行 php CLI 脚本,但它无法运行 - 它的状态为 Stopped SIGTOU(尝试写入输出) - 这是详细信息

  • Mac OS X Lion 10.7.2
  • 带有 Suhosin-Patch (cli) 的 PHP 5.3.6(构建时间:2011 年 9 月 8 日 19:34:00)

我创建了一个基本脚本 test.php

<?php echo 'Hello world'.PHP_EOL; ?>

以下是各种测试的结果:-

  • php -f test.php(显示 Hello world)
  • php -f test.php &gt;test.log 2&gt;&amp;1(Hello world 被放入 test.log)
  • php -f test.php &gt;test.log 2&gt;&amp;1 &amp; --- 我得到了 [1]+ Stopped(SIGTTOU) php -f test.php &gt; test.log 2&gt;&amp;1 -- 工作只是坐在那里什么都不做,但 lsof 显示日志文件已打开

这与PHP有关吗?类似的 shell 脚本在后台执行没有问题。

【问题讨论】:

标签: php macos command-line-interface


【解决方案1】:

如果在您的 php 构建中启用了 readline,只需将 /dev/null 作为输入传递。

在上面的示例中,它将是:

php -f test.php </dev/null >test.log 2>&1

【讨论】:

  • 好提示!不幸的是,我无法测试它,因为我现在在没有 readline 支持的情况下重建了 PHP .... :)
【解决方案2】:

现在已解决 - 感谢所有回复的人。问题是 Apple 提供了与操作系统预构建的 PHP - CLI 版本是使用包含 readline 构建的 - http://www.php.net/manual/en/intro.readline.php ...这会阻止脚本的任何后台运行,因为 readline 会自动使用 TTY 启动 IO ...

我的问题是我无法构建自己的 PHP 版本,因为这个 -> http://forums.macrumors.com/showthread.php?t=1284479 - 一旦我解决了这个问题,我的后台脚本问题就消失了 :)

【讨论】:

    【解决方案3】:

    嗯,一个 PHP 脚本在它执行完成时停止,即一个简单的 echo "Hello World" 在它输出字符串后立即执行,我猜它与它有关 ;-)

    【讨论】:

    • 不会解释 SIGTTOU(后台进程尝试写入 TTY 输出)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多