【问题标题】:How can I stop Supervisor processes ( a process control system ) from within a PHP script Supervisor is managing?如何从主管管理的 PHP 脚本中停止主管进程(过程控制系统)?
【发布时间】:2012-02-06 09:20:30
【问题描述】:

我正在使用 Supervisor 并行化一个 PHP 脚本。当我的脚本从数据库中得到某个响应时,它会执行一个命令来停止使用 supervisorctl 的 Supervisord 守护进程控制的所有进程。这是命令:

// gracefully stop all processes in supervisor's group called processes
$cmd = 'sudo /usr/bin/supervisorctl stop processes:*';
exec( $cmd, $outputs );

问题在于,当在 Supervisor 控制下的 PHP 脚本中触发此命令时,该命令似乎没有任何影响。为什么?

如果我启动这组在 Supervisor 中运行的进程,然后直接从命令行触发另一个脚本实例,它会工作并且所有 Supervisor 进程都会停止。

发生了什么事?守护进程的 PHP 脚本不能exec() shell 命令吗?

【问题讨论】:

    标签: php exec supervisord


    【解决方案1】:

    我检查了 Supervisor 的日志文件,发现错误消息“抱歉,您必须有一个 tty 才能运行 sudo。”据我所知,这是因为 Supervisor 已经守护了我的 PHP 脚本。由于 Linux 的安全性,我不允许在守护进程中使用 sudo 调用命令。

    解决方案是以当前用户身份运行 Supervisor,默认情况下会这样做,除非您像我一直在做的那样使用 sudo 命令执行它(sudo /usr/bin/supervisord)。我这样做是因为我的脚本没有运行所需的所有访问权限(我想我很久以前在设置进程时很懒惰)。

    修复此问题后,我可以不使用sudo命令(/usr/bin/supervidord)启动Supervisor,然后我不需要使用sudo执行supervisorctl(/usr/bin/supervisorctl)来控制它,从而解决了根本问题能够从守护进程调用 sudo。

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2022-10-14
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多