好的,这是一个棘手的问题(我认为)我需要从 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”才会起作用,这是一个相当大的安全问题。你确定吗?