2.shell工具
2.1.日誌文件
簡介
建立日誌文件是很重要的,記錄了重要的信息。一旦出現錯誤,這些信息對於咱們排錯是很是有用的;監控的信息也能夠記錄到日誌文件
經常使用的日誌文件的方法
以時間爲標識的日誌文件
例子shell
#!/bin/bash #當前的日期 current_date=`date "+%Y%m%d"` #今天的日誌文件名 todaylog="log/${current_date}.log" #若是日誌文件不存在,建立一個 if [! -f $todaylog ] then touch $todaylog fi #輸出日誌到日誌文件 log_time_format=`date "+%Y-%m-%d %T"` echo "${log_time_format} 命令開始" >>$todaylog # #command blocks sleep 4 # #輸出日誌到日誌文件 log_time_format=`date "+%Y-%m-%d %T"` echo "${log_time_format}命令結束" >>$todaylog
以進程號爲標識的臨時文件
例子bash
#!/bin/bash #取得當前進程號 current_PID=$$ #得到特定進程的進程號並重定向到一個臨時文件中 ps -aux | grep "/user/sbin/httpd" | grep -v "grep" | awk '{print $2}' > /tmp/${current_PID}.txt #命令塊開始 for pid in `cat /tmp/${current_PID}.txt` do { echo "kill -9 $pid kill -9 $pid } done #命令塊結束 #刪除臨時文件 rm -f /tmp/${current_PID}.txt
2.2.信號
簡介
信號就是系統向腳本或命令發出的消息,告知它們某個事件的發生
kill命令
kill -l 列出全部的信號
列出一些經常使用信號
1 SIGHUP 掛起或父進程被殺死
2 SIGINT 來自鍵盤的中斷信號,一般是 Ctrl-C
3 SIGQUIT 從鍵盤退出
9 SIGKILL 無條件退出
11 SIGSEGV 段(內存)衝突
15 SIGTERM 軟件終止(缺省殺進程)
信號0爲」退出shell「信號。爲了發出信號0,只要從命令行鍵入exit,或者在一個進程或命令行中使用 Ctrl-D 便可
kill 發送信號給進程
例子
kill -s 信號名 進程號 這種格式來給進程發送相應信號
kill -s SIGKILL 7696 殺死進程號爲7696的進程
kill -信號的編號 進程號 這種格式來給進程發送對應的信號
kill -9 7696 殺死進程號爲7696的進程
2.3.trap捕捉信號
簡介
信號能夠被應用程序或腳本捕獲,並依據該進程號(一、二、3和15)採起相應的行動。一些信號不能被捕獲。例如,若是一個命令收到了信號9,就沒法再捕捉其餘信號
捕捉到一個信號後,它可能會採起下面的三種操做之一
1.不採起任何行動,由系統來進行處理
2.捕獲該信號,可是忽略它
3.捕捉該信號,並採起相應行動
trap可使你在腳本中捕捉信號。命令格式是:trap name signal(s)
其中name是捕捉到信號之後所採起的一系列操做。實際中,name通常是一個專門用來處理所捕捉信號的函數。name須要用雙引號""引發來。
signal就是待捕捉的信號
最多見的行動是
1.清除臨時文件
2.忽略該信號 例子:trap "" 2 3
3.詢問用戶是否終止該腳本的運行
例子1函數
#!/bin/bash #捕獲信號2,若是捕獲到就執行exitprocess trap "exitprocess" 2 LOOP=0 function exitprocess() { echo "You just hit <CTRL-C>, at number $LOOP" echo "I will now exit" exit 1 } while: do LOOP=$[$LOOP+1] echo $LOOP sleep 1 done
例子2工具
#!/bin/bash LOOP=0 trap "exitprocess" 2 HOLD1=/tmp/hold1.$$ HOLD2=/tmp/hold2.$$ function exitprocess() { echo -e "\nRecived Interrupt...." echo -n "Do you really wish to exit?(Y/N)" read ANS case $ANS in Y|y) rm_tmp_file ;; N|n) ;; *) exitprocess ;; esac } function rm_tmp_file() { echo "<CTRL-c> detected .. Now cleaning up ... Wait" rm /tmp/*.$$ 2>/dev/null exit 1 } while : do LOOP=$[$LOOP+1] echo $LOOP df >> $HOLD1 ps -xa >> $HOLD2 sleep 1 done
2.4.eval
簡介
eval命令將會首先掃描命令行進行全部的置換,而後再執行該命令。該命令適用於那些一次掃描沒法實現其功能的變量
例子,myfile 文件的內容是 ls -l
MYFILE="cat myfile";`eval $MYFILE`
等價於 eval `cat myfile`
也就是執行 cat myfile 輸出結果所表明的那條命令
2.5.logger
簡介:
logger命令向/var/log/messages文件發送消息
logger命令通常形式是:
logger -p -i message
-p 爲優先級,這裏只涉及到提示用戶注意的優先級,這也是缺省值
-i 在每一個信息中記錄發送消息的進程號
例子
logger -p -i "chinaitlab shenzhen"
查看 /var/log/messages 就能夠查看插入了這條信息命令行