代码之家  ›  专栏  ›  技术社区  ›  Desavil

PHP fpm重新启动后的PHP kill exec()后台进程

  •  0
  • Desavil  · 技术社区  · 7 年前

    我使用nginx和php7.1-fpm。我想使用PHP和exec()运行一个后台进程。

    我的短代码:

    <?php
    exec('/usr/local/bin/program > /dev/null 2>&1');
    

    <?php
    exec('sudo -u another_user /usr/local/bin/program > /dev/null 2>&1');
    

    然而,这并没有解决问题——仍然致命。

    1 回复  |  直到 7 年前
        1
  •  1
  •   FunThomas    6 年前

    这似乎是由于 php-fpm service systemd .

    从启动的所有进程 php-fpm 属于其控制组,并且当您重新启动服务时 将SIGTERM发送到控制组中的所有进程,即使它们已被守护、分离和/或属于另一个会话。

    您可以使用以下命令检查控制组:

    systemd-cgls
    

    php fpm 只需编辑它。服务文件:

    vi /etc/systemd/system/multi-user.target.wants/php7.0-fpm.service
    

    KillMode=process
    

    systemctl daemon-reload
    

    参考文献: Can't detach child process when main process is started from systemd

    http://man7.org/linux/man-pages/man5/systemd.kill.5.html

    最好是一个命令(类似于 setsid )这允许启动一个进程并从控制组中分离出来,但我一直无法找到它。