使用swoole進行系統監控

一般狀況下咱們須要對服務器的某一個服務進行監控, 以肯定該服務是在正常運行, 通常使用linux的計劃任務能夠實現, 可是計劃任務的最小執行時間間隔是秒,每每並不能知足咱們的要求, 這時候Swoole的毫秒定時器就該出場了php

監控代碼css

<?php
class Server {
    const PORT = 80;
    
    public function port() {
        $shell  =  "netstat -anp 2>/dev/null | grep ". self::PORT . " | grep LISTEN | wc -l";
        $result = shell_exec($shell);
        if($result != 1) {
            // 發送報警服務 郵件 短信
            /// todo
            echo date("Ymd H:i:s")."error".PHP_EOL;
        } else {
            echo date("Ymd H:i:s")."succss".PHP_EOL;
        }
    }
}
// nohup
swoole_timer_tick(2000, function($timer_id) {
    (new Server())->port();
    echo "time-start".PHP_EOL;
});

運行
注意如下命令要求使用絕對路徑linux

nohup /usr/bin/php /home/vagrant/code/swoole/script/bin/jian.php > /home/vagrant/code/swoole/script/bin/log.txt &

補充說明
&
當在前臺運行某個做業時,終端被該做業佔據;能夠在命令後面加上& 實現後臺運行。例如:shell

sh test.sh &

適合在後臺運行的命令有find、費時的排序及一些shell腳本。在後臺運行做業時要小心:須要用戶交互的命令不要放在後臺執行,由於這樣你的機器就會在那裏傻等。不過,做業在後臺運行同樣會將結果輸出到屏幕上,干擾你的工做。若是放在後臺運行的做業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:服務器

command > out.file 2>&1 &

這樣,全部的標準輸出和錯誤輸出都將被重定向到一個叫作out.file的文件中。swoole

nohup
使用&命令後,做業被提交到後臺運行,當前控制檯沒有被佔用,可是一但把當前控制檯關掉(退出賬戶時),做業就會中止運行。nohup命令能夠在你退出賬戶以後繼續運行相應的進程。nohup就是不掛起的意思(no hang up)。該命令的通常形式爲:vagrant

nohup command &

若是使用nohup命令提交做業,那麼在缺省狀況下該做業的全部輸出都被重定向到一個名爲nohup.out的文件中,除非另外指定了輸出文件:code

nohup command > myout.file 2>&1 &

使用了nohup以後,不少人就這樣無論了,其實這樣有可能在當前帳戶非正常退出或者結束的時候,命令仍是本身結束了。因此在使用nohup命令後臺運行命令以後,須要使用exit正常退出當前帳戶,這樣才能保證命令一直在後臺運行。
2>&1解析排序

command >out.file 2>&1 &

command>out.file是將command的輸出重定向到out.file文件,即輸出內容不打印到屏幕上,而是輸出到out.file文件中。
2>&1 是將標準出錯重定向到標準輸出,這裏的標準輸出已經重定向到了out.file文件,即將標準出錯也輸出到out.file文件中。最後一個&, 是讓該命令在後臺執行。
試想2>1表明什麼,2與>結合表明錯誤重定向,而1則表明錯誤重定向到一個文件1,而不表明標準輸出;換成2>&1,&與1結合就表明標準輸出了,就變成錯誤重定向到標準輸出.進程

相關文章
相關標籤/搜索