您的位置:首页 > 运维架构 > Linux

Linux初级脚本:一个简单的日志核查脚本

2016-08-17 16:42 274 查看
领导交代任务,要每天检查定时任务有没有执行。虽然简单但太繁琐,写了个脚本偷懒。顺便学习几个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本 bash