Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP启动/重新启动进程_Php_Shell_Process_Ssh - Fatal编程技术网

使用PHP启动/重新启动进程

使用PHP启动/重新启动进程,php,shell,process,ssh,Php,Shell,Process,Ssh,我已经创建了一个php脚本,它允许我单击一个按钮来重新启动php脚本。然而,我不确定最好的方法。下面是它的快照: 我目前有: if(isset($_POST['login_restart'])) { $command = exec("/usr/bin/php /var/www/html/login_server.php >/dev/null &"); $pid = exec("nohup $command > /dev/null 2>&1 &am

我已经创建了一个php脚本,它允许我单击一个按钮来重新启动php脚本。然而,我不确定最好的方法。下面是它的快照:

我目前有:

if(isset($_POST['login_restart']))
{
    $command = exec("/usr/bin/php /var/www/html/login_server.php >/dev/null &");
    $pid = exec("nohup $command > /dev/null 2>&1 & echo $!");
    $info = "Login server started...PID: $pid";
}
然而,这似乎不起作用。我需要它,所以当按下“重启”按钮时,它会启动登录服务器,并保持其运行。我一直在SSH中使用screen函数,但是,我不想一直登录SSH来重新启动登录服务器。我想以某种方式使用一个进程ID,这样我就可以检查脚本是否正在运行,如果没有,它将允许我单击“重新启动”按钮


谢谢。

您想手动而不是自动执行此操作,有什么特殊原因吗?服务器不应该总是重新启动吗

我的建议是,通过使用
cron
定期检查脚本的状态,或者
bash
无限循环脚本的不朽性,自动执行此操作

为了方便起见,首先创建一个启动程序脚本来调用您的PHP,并将其称为
run\u login\u server.sh
(不要忘记chmod+x它,以便执行):

然后创建
login\u server\u daemon.sh
在无限循环中运行脚本(同样,
chmod+x
使其可执行):

注意:我没有在上面的
bash
脚本中为php过程提供背景。它是有效的,因为bash循环每次都会调用php,并且循环只会在php死机后再次迭代。只需执行
login\u server\u daemon.sh
即可启动循环(通过init服务或像您现在使用的那样在分离的屏幕会话中)

如果您的PHP脚本挂起,或者您想重新加载它们,因为您已经更新了代码,您可以简单地终止循环进程–
运行\u login\u server.sh
,bash循环将使其重新启动

它就像
killall run\u login\u server.sh一样简单,您可以通过php的
exec
来实现。请注意,您需要注意谁执行了什么的用户权限:如果您将
login\u server\u daemon.sh
作为您的\u用户名执行,但php作为php\u用户名运行,那么php将无权
killall
您的进程

最后,如果您无法在
cron
script
方法之间进行选择,则需要考虑以下因素:

脚本应该永远存在,并且只有在以下情况下才会消亡:1)显式终止;2)bash在while循环中以某种方式绊倒并终止,我怀疑这会发生;3)机器范围内的灾难发生,在这种情况下,您的小bash脚本停止是最不需要担心的。该脚本的一个好处是,在php(或您想在无限循环中调用的任何东西)死亡后立即重新启动


cron
有一个问题,即如果您真的关心立即恢复,它只能在最频繁的设置下每分钟检查一次。如果你决定停止脚本,你还必须将它从crontab中删除,否则它就会死灰复燃。

原因是脚本有时会挂起或冻结,我每天都会对脚本进行多次更改(添加游戏项等)。我只是觉得在需要的时候点击一个按钮来重新启动程序更容易。明白了。在这种情况下,考虑合并方法:运行不朽BASH脚本,以便在服务器死机时重新启动服务器,并创建脚本,每当您想更新或挂起它们时,就可以杀死它们。因此,我更喜欢一个表单,这样他们只需单击“重新启动”按钮,它就可以重新启动脚本。编辑我的答案,明确说明如何通过PHP的
exec
杀死循环脚本保持活动状态的动作,从而任意重新启动脚本。我把你的php命令做成了一个bash脚本,给它一个独特的名字,很容易被
killall
Ok,我试过你说的,使用
exec
exec(“killall/var/www/html/run\u login\u server.sh”),但是,脚本仍然没有启动。。。
#!/bin/bash
/usr/bin/php /var/www/html_login_server.php > /dev/null
#!/bin/bash
while :
do
  ./run_login_server.sh # or any command line to be executed forever
done