<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [toc] # **if語法案例** ## **1. 判斷系統剩余內存** 開發判斷系統剩余內存的腳本,小于100M郵件報警給管理員,3分鐘執行一次 * 思路: 1. 命令行實現獲取系統剩余內存值的方法 1. 郵件保健設置 1. 判斷,達到要求報警 1. 定時任務配置 ### 1) 腳本正文 * `cat /server/scripts/t3.sh` ```shell #!/bin/bash Mem=`free -m|awk 'NR==3 {print $4}'` Chars="current memory is $Mem" #Mail=`mail -s "`date +%F-%T`menory error" noah@mail.com $Chars` Mail=`echo "menory error to send noah@mail.com $Chars"` #沒有配置郵件客戶端,所以用echo命令模擬了發送郵件, if [ $Mem -lt 1000 ] then echo $Chars echo $Mail fi ``` ### 2) 執行結果 >*`sh /server/scripts/t3.sh ` current memory is 866 menory error to send noah@mail.com current memory is 866 然后加入定時任務中執行即可 ` */3 * * * * /bin/bash /server/scripts/t3.sh` ## **2.監控web和數據庫的方法** 用if語句增對nginx或mysql數據庫檢查服務是否正常,如果未啟動則啟動服務 ### 1) 端口監控 在服務器本地監控服務端口,常見命令netstat、ss、lsof 從遠端監控服務器本地端口,常見命令telnet、nmap、nc ### 2) 進程監控 適用于本地服務器,過濾注意使用進程名 ### 3) 客戶端模擬 使用wget或curl命令測試,如果檢測數據庫,需要轉為通過web服務器去訪問數據庫 利用返回值($?)進行判斷 獲取特殊字符串以進行判斷(需要事先開發好程序) 根據http響應header的情況進行判斷 ### 4) 數據庫判斷* 通過mysql客戶端連接數據庫,根據返回值或返回內容判斷,如: `mysql -uroot -poldboy123 -e "select version();" &>/dev/null;echo $?` >對端口進程等進行判斷時,盡量先通過grep過濾端口和進程特殊標記字符串,然后結合wc將過濾到的結果轉成行數在比較, 如果單純的根據具體的列取具體的值判斷會很麻煩,如果一定要用,也要盡量用字符串比較的語法, 不要用數字比較 ## **3.mysql數據庫檢測命令演示** ### 1)端口監控命令 ```shell netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}' #端口比較,不推薦 netstat -lntup|grep mysql|wc -l ss -lntup|grep mysql|wc -l ss -lntup|grep mysql|wc -l lsof -i tcp:3306|wc -l ``` >不推薦直接數字比較法,推薦過濾結果用wc轉換后比較的方法 ### 2)遠端監控命令 ```shell nmap 127.0.0.1 -p 3306|grep open|wc -l echo -e "\n"|telnet 127.0.0.1 3306 2>/dev/null|grep Connected|wc -l nc -w 2 127.0.0.1 3306 &>/dev/null;echo $? ``` ### 3)進程監控 ```shell ps -ef|grep mysql|grep -v grep|wc -l ``` ### 4)客戶端模擬監控 > * `wget --spider --timeout=10 --tries=2 www.baidu.com &>/dev/null;echo $?` --spider參數是模擬爬取,不真實下載數據 --tries參數是重試次數 > * `curl -s -o /dev/null http://www.baidu.com;echo $?` -s為沉默模式,-o /dev/null表示將輸出定向到空 ### 5)通過程序訪問數據庫監控(以PHP) * cat /server/scripts/testmysql.php ```php <?php $link_id=mysql_connect('locahost','root','luogang') or mysql_error(); if ($link_id) { echo "mysql successful by luogang !"; } else { echo mysql_error() } ?> ``` > 將此程序放到了lnmp服務器的站點目錄,然后curl訪問 或者在php服務器端執行本程序 對返回結果進行關鍵字過濾即可 ## **4.監控MySQL的更多參考腳本** ### 過濾端口后對比[不推薦] ```shell if [ `netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'` -eq 3306 ] then echo "MySQL is Running." else echo "MySQL is Stopped." /etc/init.d/mysqld start fi ``` > 說明:此法不建議,若端口不存在會報錯,不要用具體的值比較,用wc轉換后比較行數 ```if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]``` 說明:比較數值改為比較字符串,比上一個腳本好一點,但是仍然麻煩 ### 過濾進程或端口對比[推薦] ```shell if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ] then echo "MySQL is Running." else echo "MySQL is Stopped." /etc/init.d/mysqld start fi ``` >說明:過濾進程名并wc轉換成數值,推薦的方法 ```if [ `lsof -i tcp:3306|wc -l` -gt 0 ]``` 說明:過濾端口轉換成數值,推薦的方法 ```if [ `ps -ef|grep -v grep|grep mysql|wc -l` -ge 1 ]``` 說明:比較傳統的方法,grep過濾后對比,但是要過濾掉自己 ### nmap或nc判斷端口[推薦] ```shell [ `rpm -qa nmap|wc -l` -lt 1 ] && yum install nmap -y &>/dev/null if [ `nmap 127.0.0.1 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ] then echo "MySQL is Running." else echo "MySQL is Stopped." /etc/init.d/mysqld start fi ``` > 說明:先判斷nmap是否安裝,在進行遠端的端口檢查,并用wc轉換成數值比較,推薦的方法 ```shell [ `rpm -qa nc|wc -l` -lt 1 ] && yum install nc -y &>/dev/null if [ `nc -w 2 127.0.0.1 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ] ``` > 說明:特殊方法,nc執行成功,則輸出對應的ok,讓后過濾ok并判斷,好思路 ## **5.rsync啟停腳本** ### 腳本內容 * cat /etc/init.d/rsync.sh ```shell #!/bin/sh # chkconfig: 2345 20 80 # description rsyncd startup scripts by oldby. #設置可以通過chkconfig管理自啟動 if [ $# -ne 1 ] then echo $"usage:$0{start|stop|restart}" exit 1 fi #傳參個數不等于1,則提示并退出 if [ "$1" = "start" ] then rsync --daemon if [ `netstat -lntup|grep rsync|wc -l` -ge 1 ] then echo "rsyncd is started." exit 0 fi #如果傳參是start,則執行啟動命令,并過濾進行并判斷行數,大于1則啟動成功,輸出信息并退出 elif [ "$1" = "stop" ] then pkill rsync if [ `netstat -lntup|grep rsync|wc -l` -eq 0 ] then echo "rsyncd is stopped." exit 0 fi #如果傳參是stop,則殺掉rsync進程,過濾進程判斷行數,如果為則關閉成功 elif [ "$1" = "restart" ] then pkill rsync sleep 2 rsync --daemon #如果是restart參數,則殺掉進程并再開啟進程 else echo $"usage:$0{start|stop|restart}" exit 1 fi #如果傳入的參數不是以上3個字符串,則提示錯誤并退出 ``` ## **6.監控nginx服務異常** 同監控mysql一樣,也使用端口、進程或wget/curl訪問來進行檢測,首先都需要再命令行執行成功了,放到腳本里面才是正確的 ### 取端口然后對比數值,不推薦,端口不存在易報錯 ```shell if [ `netstat -lnt|grep 80|awk -F "[ :]+" '{print $5}'` -eq 80 ] then echo "Nginx is Running." else echo "Nginx is Stopped." /etc/init.d/nginx start fi ``` ### 讀端口后當作字符串比較,取值麻煩 ```if [ "`netstat -lnt|grep 80|awk -F "[ :]+" '{print $5}'`" = "80" ]``` ### 過濾進行后轉換為數值,**推薦** ```if [ `netstat -lntup|grep nginx|wc -l` -gt 0 ]``` ### 過濾端口轉換為數值,**推薦** ```if [ `lsof -i tcp:80|wc -l` -gt 0 ]``` ### nmap遠程監測方法,**推薦** ```shell [ `rpm -qa nmap|wc -l` -lt 1 ] && yum install nmap -y &>/dev/null if [ `nmap 127.0.0.1 -p 80 2>/dev/null|grep open|wc -l` -gt 0 ] ``` ### nc遠程監測方法,**推薦** ```shell [ `rpm -qa nc|wc -l` -lt 1 ] && yum install nc -y &>/dev/null if [ `nc -w 2 127.0.0.1 80 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ] ``` ### 過濾進程并排查字符 ```if [ `ps -ef|grep -v grep|grep nginx|wc -l` -ge 1 ]``` ### 遠程獲取狀態碼然后做正則匹配,雙中括號的用法 ```if [[ `curl -I -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1` =~ [23]0[012] ]]``` ### 遠程通過egrep過濾狀態碼,然后轉換為數值,**推薦** ```if [ `curl -I http://127.0.0.1 2>/dev/null|head -1|egrep "200|302|301"|wc -l` -eq 1 ]``` ### 遠程訪問網站,根據返回的結果和其他的值進行比較 ```if [ "`curl -s http://127.0.0.1`" = "oldboy" ]``` 說明:方法略麻煩但是結果最準確,使用與數據庫及更深層次的對網站集群后端各個應用的檢測
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看