从 php 脚本重新启动 php5-fpm

从 php 脚本重新启动 php5-fpm

好的,这是一个棘手的问题(我认为)我需要从 php 脚本重新加载 php5-fpm 明显的问题是,一旦执行重新加载命令,当前脚本就会受到干扰,我试图像这样延迟执行

(sleep 5;  sudo service php5-php reload) & echo ""

但这没有帮助,nginx 立即响应为 502 bad gateway。仅供参考,我正在使用 php 的exec函数

有什么办法吗?

答案1

确保运行 php 的用户具有重新加载 php5-fpm 的 sudo 权限,然后:

shell_exec("nohup sh -c 'sleep 1; sudo reload php5-fpm' > /dev/null 2>&1 &");

答案2

尝试将重启命令放入 shell 脚本中,从睡眠期开始。这样您的 php 函数就会调用服务器上的脚本,而不是直接重启 php。这样它就不会自我终止。

另请查看这个答案以了解如何直接完成:

https://stackoverflow.com/questions/9798438/automatically-restart-php-script-on-exit

<?php
    echo ++$argv[1];     // count every restart
    $_ = $_SERVER['_'];  // or full path to php binary

    echo "\n======== start =========\n";
    // do a lot of stuff
    $cnt = 0;
    while( $cnt++ < 10000000 ){}
    echo "\n========== end =========\n";

    // restart myself
    pcntl_exec($_, $argv);
?>

答案3

很高兴能看到您的一些 php 代码;您想用它实现什么目的echo ""

无论如何,您可以尝试使用“sh -c”和“disown”,如下所示:

<?php
    exec("sudo sh -c 'sleep 3 && service php5-fpm restart' >/dev/null 2>&1 & disown");
    echo("done");
?>

只有将 www-data 放入 sudoers 文件中时,带有 exec() 的“sudo”才会起作用,这是一个相当大的安全问题。你确定吗?

相关内容