使用PHP启动/重新启动进程
我已经创建了一个php脚本,它允许我单击一个按钮来重新启动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
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