为什么超级用户不登录我的PHP CLI fwrite(STDOUT,“消息”)?

时间:2019-02-22 14:16:48

标签: php command-line-interface supervisord

我有一个由超级用户运行的PHP命令行应用程序(zconsole awswebhookrunner)。

Supervisord不会登录文件fwrite(STDOUT, "message"),但是会登录echo "message"

Supervisord配置

[program:aws_webhook]
command=/home/(username)/bin/zconsole awswebhookrunner
process_name=%(program_name)s_%(process_num)02d
numprocs=1
directory=/tmp
priority=999
autostart=true
autorestart=true
startretries=100
stopwaitsecs=10
user=(username)
stdout_logfile=/home/(username)/logs/aws_webhook_runner.out.log
stderr_logfile=/home/(username)/logs/aws_webhook_runner.err.log
stdout_logfile_maxbytes=10MB

PHP代码

private function log($message, $type="info")
{
    $output=STDIN;
    switch ($type) {
        case "error":
            $output=STDERR;
            break;
        default:
            $output=STDIN;
    }
    $to_log=date("Y-m-d H:i:s")." ".$message;
    fwrite($output,$to_log.PHP_EOL) ;
    //echo $to_log.PHP_EOL;
    fflush($output);
    unset($to_log);
}

软件版本

PHP version: 5.3.3
OS: CentOS 6.10
supervisord: 3.3.5

问题

  1. 我的supervisord设置正确吗?
  2. 我是否误解了fwrite(STDOUT|STDERR, $message);的行为?
  3. echo $message;发送到STDOUT为何起作用?

1 个答案:

答案 0 :(得分:0)

  1. 明智的配置,我认为很好。就命令而言,这确实是一个不同的问题。
  2. 您正在尝试STDIN而不是STDOUT。我认为STDIN用于输入supervisord与STDIN无关。
  3. echo将打印到STDOUT,因为它是其默认行为。