当前位置: 首页 > 知识库问答 >
问题:

Supervisord"退出状态1不期望"运行php脚本

贺宏逸
2023-03-14

我在尝试配置supervisor以运行php脚本时遇到了问题。在调试模式下运行supervisor可以提供以下信息:

2015-03-09 08:53:06,342 INFO supervisord started with pid 2030
2015-03-09 08:53:06,358 INFO spawned: 'worker1' with pid 2031
2015-03-09 08:53:06,423 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:06,424 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:07,440 INFO spawned: 'worker1' with pid 2032
2015-03-09 08:53:07,587 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:07,589 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:09,604 INFO spawned: 'worker1' with pid 2033
2015-03-09 08:53:09,756 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:09,758 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:12,775 INFO spawned: 'worker1' with pid 2034
2015-03-09 08:53:12,973 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:12,974 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:13,976 INFO gave up: worker1 entered FATAL state, too many start retries too quickly

主管配置:

[program:worker1]
command=php myScript.php
directory=/home/path/to/script/
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/worker1.err.log
stdout_logfile=/var/log/worker1.out.log
redirect_stderr=true
environment=PATH="/usr/bin"

对于这个测试,请使用myScript。php只需打印出echo“test”。PHP_EOL

没有报告php错误的日志,如果我通过cli运行脚本,它将按预期工作。supervisord日志只报告与debuggin相同的输出。

我也尝试过使用绝对路径,比如/usr/bin/php/home/path/to/script/myScript。php但没有任何变化。

myScript的文件权限。php设置为-rwxr-x 1 root apache

真的不知道还能查到什么。谢谢你的支持!

更新1

我还尝试过监视其他程序,比如/bin/cat或bash脚本,效果非常好。问题似乎仅限于php。

UPDATE_2

正如NB在评论中指出的,我已将测试脚本更改为更像长期运行的作业:

while(true){
    echo "test".PHP_EOL;
    sleep(10);
}

和以前一样,它进入致命状态。


共有3个答案

西门胜涝
2023-03-14

我已经使用Supervisord一段时间了,这是我配置中的内容:

[program:worker1]
command=php /absolute/path/to/myScript.php

我写这个作为一个答案的原因是由于格式。

此外,请尝试以下脚本:

for(i = 0; i < 10; i++)
{
    printf("\nIteration: %d", $i);
    usleep(1000 * 200); // 200 milliseconds between each printf
}

exit;

并将其添加到监管中。它应该在回响后重新启动。

鲍健柏
2023-03-14

尝试设置startsecs=0

[program:foo]
command = ls
startsecs = 0
autorestart = false
http://supervisord.org/configuration.html

开始

程序启动后需要运行的秒数,以考虑启动成功。如果程序在启动后没有持续这么多秒,即使它以“预期”的退出代码退出(请参阅exitcodes),启动也将被视为失败。设置为0表示程序不需要在任何特定时间内保持运行。

柯梓
2023-03-14

我用退出代码1重现这种行为的唯一方法是使用无效的文件路径。因此,首先请仔细检查路径是否正确。但我认为你以前做过。

我更假设该文件位于主目录下,而root用户无法访问和运行它。所以我会尝试更改脚本的位置。

对于测试,您可以将脚本放在/tmp/myScript.php下:

cp /home/path/to/script/myScript.php /tmp/myScript.php

并像这样修改您的主管配置:

[program:worker1]
command=php myScript.php
directory=/tmp/
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/worker1.err.log
stdout_logfile=/var/log/worker1.out.log
redirect_stderr=true
environment=PATH="/usr/bin"

现在你应该可以运行你的脚本了。

如果这样做有效,您应该检查阻止root访问脚本的文件夹。这可能是由一个加密(并装入)文件夹(home dir?)引起的,或者如果该位置是从其他位置装载的(samba、nfs…)。要解决这个问题,您可以尝试将用户从root更改为您的用户(我不建议这样做),或者将项目位置更改为另一个文件夹,该文件夹不位于您的home dir下。

 类似资料:
  • 我不得不格式化我的驱动器,但我的一个项目不再工作了。所有其他相同类型的项目都运行良好。这是Laravel Vue JS。问题是我无法运行npm run watch/dev或prodution。他们都给出了错误。Laravel 5.7 npm ver 6.4.1 node ver 10.15.0 windows 10 我安装/卸载了不同的节点版本,没有骰子。我已经多次删除/安装节点模块,什么都没有。

  • 问题内容: 当我运行以下代码时: 我收到此错误: 退出状态1 但是,这对调试错误的确切原因没有帮助。 如何获得更详细的信息? 问题答案: 解决方案是使用Command对象的属性。可以这样完成: 运行上面的代码,可以清楚地说明问题所在: 退出状态1:查找:-exec:不终止“;” 或“ +” 编辑: 在上面的代码中,我们希望在发生错误的情况下,消息将被打印到stderr,并且命令将返回非零的错误代码

  • 当我尝试使用此命令安装mpi4py时 也尝试过, 我总是会遇到这样的错误:

  • ...there are dark corners in the Bourne shell, and people use all of them. Chet Ramey exit 命令一般用于结束一个脚本,就像C语言的exit一样。它也能返回一个值给父进程。 每一个命令都能返回一个退出状态(有时也看做 返回状态 ).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值,此值通常可以被解释

  • 我是在尝试 但是我有一个错误 使用缓存的PyAudio-0.2.11.tar.gz(37 kB)安装收集的软件包:pyaudio运行setup.py为pyaudio安装:开始运行setup.py为pyaudio安装:完成,状态为“错误” 错误:命令出错,退出状态为1:' C:\ Users \ Admin \ PycharmProjects \ AI \ venv \ Scripts \ pyth