向大家分享一個shell指令碼的坑
打算在跳板機上寫一個shell指令碼,批次檢查遠端伺服器上的main程式是否在健康執行中。
先找出其中一臺遠端機器,檢視main程式執行情況
[root@two002 tmp]# ps -ef|grep main root 23448 23422 0 11:40 pts/0 00:00:00 grep --color=auto main [root@two002 tmp]# ps -ef|grep main|grep -v grep|wc -l
shell檢查指令碼如下
[root@two002 tmp]# cat /tmp/main_check.sh #!/bin/bash NUM=$(ps -ef|grep main|grep -v grep|wc -l) if [ $NUM -eq 0 ];then echo "It's not good! main is stoped!" else echo "Don't worry! main is running!" fi
執行指令碼
[root@two002 tmp]# sh -x /tmp/main_check.sh ++ grep main ++ grep -v grep ++ wc -l ++ ps -ef + NUM=2 + '[' 2 -eq 0 ']' + echo 'Don'\''t worry! main is running!' Don't worry! main is running! [root@two002 tmp]# sh /tmp/main_check.sh Don't worry! main is running!
如上執行結果,發現指令碼執行過程中,看到賦予NUM引數的結果值是2!但是手動執行ps -ef|grep main|grep -v grep|wc -l的結果明明是0!!
這是由於grep匹配的問題,需要grep進行精準匹配,即"grep -w"。這就需要將main_check.sh指令碼內容修改如下:
[root@two002 tmp]# cat /tmp/main_check.sh #!/bin/bash NUM=$(ps -ef|grep -w main|grep -v grep|wc -l) if [ $NUM -eq 0 ];then echo "Oh!My God! It's broken! main is stoped!" else echo "Don't worry! main is running!" fi
再次執行檢查指令碼,就OK了
[root@two002 tmp]# sh -x /tmp/main_check.sh ++ grep -w main ++ grep -v grep ++ wc -l ++ ps -ef + NUM=0 + '[' 0 -eq 0 ']' + echo 'Oh!My God! It'\''s broken! main is stoped!' Oh!My God! It's broken! main is stoped! [root@two002 tmp]# sh /tmp/main_check.sh Oh!My God! It's broken! main is stoped!
故在跳板機上,批次檢查遠端伺服器的main程式執行狀態的指令碼為:
[root@tiaoban ~]# cat /usr/bin/main_check #!/bin/bash NUM=$(ps -ef|grep -w main|grep -v grep|wc -l) if [ $NUM -eq 0 ];then echo "Oh!My God! It's broken! main is stoped!" else echo "Don't worry! main is running!" fi [root@tiaoban ~]# cat /opt/script/main_check.sh #!/bin/bash for i in $(cat /opt/ip.list) do /usr/bin/rsync -e "ssh -p22" -avpgolr /usr/bin/main_check $i:/usr/bin/ > /dev/null 2>&1 ssh -p22 root@$i "echo $i;sh /usr/bin/main_check" done
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2219522/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Shell 指令碼避坑指南(一)指令碼
- 分享兩個實用的shell指令碼指令碼
- shell入門--第一個shell指令碼指令碼
- Linux shell 指令碼分享Linux指令碼
- 一個比較好的shell指令碼指令碼
- 分享一個shell指令碼的坑:grep匹配+wc取值 在指令碼執行後的結果與手動執行結果不一致指令碼
- linux shell小指令碼分享Linux指令碼
- 注意shell指令碼中ps -ef|grep的坑指令碼
- 共享一個iptables的shell指令碼檔案指令碼
- 一個shell 指令碼用來同步表用的指令碼
- 【iOS】分享一個ipa打包指令碼iOS指令碼
- MySQL的一些功能實用的Linux shell指令碼分享MySqlLinux指令碼
- Shell:如何寫一個多選選單的指令碼指令碼
- 一個自動生成awr報告的shell指令碼指令碼
- 分享一個composer的坑
- 一段shell 指令碼指令碼
- 分享工作中常用的一個Git指令碼Git指令碼
- 9個實用shell指令碼指令碼
- 從一個shell指令碼執行出錯聊起指令碼
- 18 個一線工作中常用 Shell 指令碼指令碼
- [轉]Shell向Perl指令碼中傳遞變數的方法指令碼變數
- shell指令碼:一鍵安裝LAMP、LNMP指令碼指令碼LAMPLNMP
- 分享一個提高運維效率的 Python 指令碼運維Python指令碼
- shell指令碼指令碼
- Shell指令碼應用兩個例子指令碼
- 寫好shell指令碼的8個建議指令碼
- 新增多個使用者的shell指令碼指令碼
- [轉]寫好shell指令碼的13個技巧指令碼
- mysql便於管理的幾個shell指令碼MySql指令碼
- 【shell 】求兩個檔案相加的指令碼指令碼
- 在shell指令碼中呼叫另一個指令碼的三種不同方法(fork, exec, source)指令碼
- 一個簡單的Linux啟動jar包的shell指令碼LinuxJAR指令碼
- 博主日常工作中使用的shell指令碼分享指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- 分享一個刷網頁PV的python小指令碼網頁Python指令碼
- shell指令碼一鍵安裝nginx指令碼Nginx
- Linux Shell指令碼系列之一Linux指令碼
- 編寫可靠 shell 指令碼的 8 個建議指令碼