用linux的定時腳本去執行
例如:
netstat -anp | grep 9501 結合linux定時器 crontab
但在crontab中,最小的時間粒度是1分鐘,因此可以在swoole中來執行定時操作。swoole中的定時器最小的時間粒度是1秒
通過swoole中的定時器來實現監控服務的穩定性
編寫監控服務的類
/**
* description 監控http和websocket服務
* Class Server
*/
class Server
{
const PORT = 9501;
public function port ()
{
//shell命令
$shell = 'netstat -anp | grep '.self::PORT;
//執行shell
$res = shell_exec($shell);
echo $res;
}
}
(new Server())->port();
打印出的結果可以看到
clipboard.png
上圖可以看到端口監聽狀態以及上面的一串字符(并非。。。。。)
然后可以用
netstat -anp | grep 9501 | grep LISTEN | wc -l
來看打印出的結果能夠匹配多少行
clipboard.png
接著可以再次使用該命令加以修改執行
netstat -anp 2>/dev/null | grep 9501 | grep LISTEN | wc -l
就可以看到匹配到多少行
clipboard.png
打印是1,說明服務開啟,打印是0,說明服務關閉
最后通過swoole定時器完善監控類編寫
/**
* description 監控http和websocket服務
* Class Server
*/
class Server
{
const PORT = 9501;
public function port ()
{
//shell命令
$shell = 'netstat -anp 2>/dev/null | grep '.self::PORT.' | grep LISTEN | wc -l';
//執行shell
$res = shell_exec($shell);
//判斷服務執行或關閉
if($res == 0){
//todo 發送服務關閉報警提醒
echo date('Ymd h:i:s').'error'.PHP_EOL;
}else{
echo date('Ymd h:i:s').'success'.PHP_EOL;
}
}
}
//swoole定時器,每2秒執行
swoole_timer_tick(2000,function ($timer_id){
(new Server())->port();
});
運行代碼可以看到監控服務是否正常運行
clipboard.png
也可以執行后臺運行來保存監控類的日志
執行
nohup php server.php > /var/www/html/swoole/swooletp/script/bin/monitor/log.tex
clipboard.png
打開log.text就可以看到監控類打印的日志
clipboard.png