領導交代任務,要每天檢查定時任務有沒有執行。雖然簡單但太繁瑣,寫了個腳本偷懶。順便學習幾個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