gpt4 book ai didi

php - 主管 "exit status 1 not expected"运行 php 脚本

转载 作者:可可西里 更新时间:2023-11-01 12:48:23 24 4
gpt4 key购买 nike

我在尝试配置 supervisor 以运行 php 脚本时遇到问题。在 Debug模式下运行主管给了我这个:

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

supervisord 配置:

[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 的文件权限设置为 -rwxrwxr-x 1 root apache

真的不知道我还能检查什么。感谢支持!

UPDATE_1

我也尝试过监控其他程序,例如/bin/cat 或 bash 脚本,并且效果很好。问题似乎仅限于 php。

UPDATE_2

作为注意事项在评论中指出,我已经将测试脚本更改为看起来更像是长时间运行的作业:

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

和之前一样,进入FATAL状态。

最佳答案

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

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

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

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

并像这样修改你的 supervisord 配置:

[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 访问该脚本。这可能是由加密(和挂载)的文件夹(主目录?)引起的,或者如果该位置是从其他位置(samba、nfs ...)挂载的。要解决此问题,您可以尝试将用户从 root 更改为您的用户(我不推荐这样做)或将项目位置更改为另一个不在您的主目录下的文件夹。

关于php - 主管 "exit status 1 not expected"运行 php 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28937722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com