php 如何守护进程_如何将我的php脚本以守护进程的方式一直运行?

用一个简单可靠的Shell脚本来守护一个可能会突发退出的PHP服务

/etc/rc.local 里加入开机启动命令:

nohup /path/to/swoole.sh >>/path/to/swoole.sh.log 2>&1 &

swoole.sh 内容如下:

#!/bin/sh

PREFIX=/home/eechen

INTERVAL=1

nohup php ${PREFIX}/swoole.php >>${PREFIX}/swoole.log 2>&1 & echo $! > ${PREFIX}/swoole.pid

while [ 1 ]; do

if [ ! -d /proc/`cat ${PREFIX}/swoole.pid` ]; then

nohup php ${PREFIX}/swoole.php >>${PREFIX}/swoole.log 2>&1 & echo $! > ${PREFIX}/swoole.pid

echo 'NEW_PID:'`cat ${PREFIX}/swoole.pid && date '+%Y-%m-%d %H:%M:%S'`

fi

sleep ${INTERVAL}

done

其中:

nohup 表示忽略SIGHUP信号(编号1),比如退出终端时发送的SIGHUP信号(kill -SIGHUP PID)会被忽略掉.

>>${PREFIX}/swoole.log 表示把标准输出重定向(>>表示追加,>表示覆盖)到文件swoole.log

2>&1 表示将标准错误(2:stderr)重定向到标准输出(1:stdout).

结尾加上&表示将命令放入后台运行.

$! 表示前面运行在后台的PHP进程PID.

也就是swoole.sh每隔1秒检测一次目录/proc/PID是否存在,如果不存在,则重新启动服务.

swoole.sh.log 记录的是服务重新启动的时间.

swoole.log 记录的是服务自己的输出.

比如用Shell守护vmstat:

vmstat.sh

#!/bin/sh

PREFIX=/home/eechen

INTERVAL=1

nohup vmstat 1 >>${PREFIX}/vmstat.log 2>&1 & echo $! > ${PREFIX}/vmstat.pid

while [ 1 ]; do

if [ ! -d /proc/`cat ${PREFIX}/vmstat.pid` ]; then

nohup vmstat 1 >>${PREFIX}/vmstat.log 2>&1 & echo $! > ${PREFIX}/vmstat.pid

echo 'NEW_PID:'`cat ${PREFIX}/vmstat.pid && date '+%Y-%m-%d %H:%M:%S'`

fi

sleep ${INTERVAL}

done

#运行

nohup /home/eechen/vmstat.sh >>/home/eechen/vmstat.sh.log 2>&1 &

#杀死,可以看到vmstat被重启

kill `cat /home/eechen/vmstat.pid`

这个vmstat.sh的脚本也可以用PHP实现:

nohup php /home/eechen/vmstat.php >>/home/eechen/vmstat.php.log 2>&1 &

$prefix = '/home/eechen';

$interval = 1;

shell_exec("nohup vmstat 1 >>$prefix/vmstat.log 2>&1 & echo $! > $prefix/vmstat.pid");

while ( 1 ) {

if ( !file_exists('/proc/'.trim(file_get_contents("$prefix/vmstat.pid"))) ) {

shell_exec("nohup vmstat 1 >>$prefix/vmstat.log 2>&1 & echo $! > $prefix/vmstat.pid");

echo 'NEW_PID:'.trim(file_get_contents("$prefix/vmstat.pid")).' '.date('Y-m-d H:i:s');

}

sleep($interval);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值