Linux初級腳本:一個簡單的日誌覈查腳本

領導交代任務,要每天檢查定時任務有沒有執行。雖然簡單但太繁瑣,寫了個腳本偷懶。順便學習幾個bash知識點。溫故知新吧。

#檢查前一天的crontab日誌有沒有執行JOB1和JOB2兩個定時任務
#檢查數據庫中的數據是否及時清理完
#!/bin/bashdeclare -i DB_STATUS=0
#由於日誌日期只有月、日有效,時間不作判斷,因此使用date -d參數格式化時間輸出。
#由於date命令用於grep,中間帶空格,無法直接拼接,必須先賦予一個變量,然後用雙引號標註該變量作爲grep參數
declare YESTERDAY=`date -d last-day +"%b %d"`
declare PERHOUR_JOB="JOB1"
declare PERDAY_JOB="JOB2"
cat /var/log/cron|grep "$YESTERDAY"|grep "$PERHOUR_JOB" >/dev/null 2>&1
if [ $? -eq 1 ];then
 echo "Per hour job failed."
else
 echo "Per hour job success."
fi
cat /var/log/cron|grep "$YESTERDAY"|grep "$PERDAY_JOB" >/dev/null 2>&1
if [ $? -eq 1 ];then
 echo "Per day job failed."
else
 echo "Per day job success."
fi
#切換用戶執行腳本,使用su - username -c參數,直接跟整個命令行。需要用雙引號括起整個命令

#檢查數據庫內的臨時表有沒有內容,沒有的話爲正常。有的話把內容spool到chk_perday.log
su - oracle -c "sqlplus USERNAME/USERPASSWORD @/tmp/chk_perday.sql >/dev/null 2>&1"
#注意:當循環內需要對外部變量賦值,不能使用command|while read line格式
#必須先把輸出保存到臨時文件,然後在最後done < 文件名。
#這是因爲前者while調用子進程,子進程內的賦值不帶入父變量;後者在統一進程,賦值正常。
while read XM
do
 if [ XM != null ];then
  DB_STATUS=1
  echo "$XM transfer failed"
 fi
done < /tmp/chk_perday.log
if [ $DB_STATUS = 0 ];then
 echo "Data transfer success."
else
 echo "Data transfer failed."
fi
exit


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章