標籤:
2.shell工具
2.1.記錄檔
簡介
建立記錄檔是很重要的,記錄了重要的資訊。一旦出現錯誤,這些資訊對於我們排錯是非常有用的;監控的資訊也可以記錄到記錄檔
常用的記錄檔的方法
以時間為標識的記錄檔
例子
#!/bin/bash#當前的日期current_date=`date "+%Y%m%d"`#今天的記錄檔名todaylog="log/${current_date}.log"#如果記錄檔不存在,建立一個if [! -f $todaylog ]then touch $todaylogfi#輸出日誌到記錄檔log_time_format=`date "+%Y-%m-%d %T"`echo "${log_time_format} 命令開始" >>$todaylog##command blockssleep 4##輸出日誌到記錄檔log_time_format=`date "+%Y-%m-%d %T"`echo "${log_time_format}命令結束" >>$todaylog
以進程號為標識的臨時檔案
例子
#!/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捕捉訊號
簡介
訊號可以被應用程式或指令碼捕獲,並依據該進程號(1、2、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,如果捕獲到就執行exitprocesstrap "exitprocess" 2LOOP=0function 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 1done
例子2
#!/bin/bashLOOP=0trap "exitprocess" 2HOLD1=/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 1done
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 就可以查看插入了這條資訊
Linux Shell 進階編程技巧2----shell工具