我们知道swoole的服务都是在命令行模式下面运行的,那么我怎么知道它的服务是一种运行正常的呢?
下面我就聊聊我的实现方案吧
我们知道在php中api中提供了一个执行shell的函数
shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
没错,这就是php官方对这个函数的介绍,是不是超级简单
那么是怎么做的,我就直接上代码了
<?php
class Shell
{
CONST port = 80 ;
public function port()
{
$shell = "netstat -anp | grep ".self::port." | grep LISTEN | grep tcp | wc -l";
$result = shell_exec($shell);
if ($result!=1) {
//需要报警发送邮件或者短信提醒负责人,服务已经挂掉
echo date("Y-m-d H:i:s")."-服务已经挂掉".PHP_EOL;
} else {
echo date("Y-m-d H:i:s")."-服务正常运行".PHP_EOL;
}
}
}
//调用swoole提供的毫秒定时器
Swoole\Timer::tick(1000, function(){
(new Shell())->port();
});
在终端中执行php Shell.php就可以看到输出了,如果你想让它在后台运行,执行 nohup php Shell.php & 就可以了
可以看到我的服务是运行正常的,当我把服务的进程杀死以后会发生什么呢,且看看效果
服务挂掉就shell就发现了,我们就可以给项目负责人发送邮件或者短信发送提醒信息