起因
想看一眼定时任务的时候,手误打成了-r
,接着我的定时任务就全没了……
补救措施
我们都知道,crontab的几个关键目录中有一个是/var/log/cron
,这个目录记录了crontab执行的日志。
如果平时没有备份crontab
的习惯的话,只能靠读取这个文件来找命令了。
cat /var/log/cron | grep -i "root" | grep "CMD" | awk -F 'CMD' '{print $2}' |sort|uniq -c |sort -n | grep "/bin/sh"#针对上述语句可以翻阅我之前的笔记(linux专栏下)或自行gpt解释
#最后过滤/bin/sh的原因是,在我的crontab中,除了ntp均以shell脚本执行,因此我只需关注这个部分,可以看得更少
根据上述命令的输出,我个人推荐从END
这个栏目中寻找代码
cat /var/log/cron | grep -i "root" | grep "CMD" | awk -F 'CMD' '{print $2}' |sort|uniq -c |sort -n | grep "/bin/sh" | grep "END"4 END (/bin/sh /root/exercise//backup.sh)11 END (/bin/sh /root/exercise/send_sys_to_mail.sh 2>&1)18 END (/bin/sh /root/exercise/backup-conf-ip.sh )81 END (/bin/sh /root/exercise/ipif.sh &>> /tmp/ipif.info)112 END (/bin/sh /root/exercise/sys_info_check.sh >> /tmp/sys_info_check.info 2>&1)#END开头表明crontab正常执行了这个指令
最后,自己重新补充到crontab中即可
备份定时任务
这次给我敲了个警钟,我是真没想到清空
这么关键的选项竟然没有二次确认。
为了避免,编写了一个定时备份crontab内容
的脚本放入crontab中执行。
#编写脚本
vim backup_crontab.sh#!/bin/bash
#author: tassel_yue#1.set variable
dir=/tmp
IP=`hostname -I | awk '{print $1}'`
TIME=`date +%F_%w`
backup_dir=${dir}/$IP#2. backup
mkdir -p ${backup_dir}
/usr/bin/crontab -l &> /tmp/$IP/backup_crontab~$TIME#放入crontab
crontab -e
#5.backup crontabfile to tmp dir,once one day
0 0 * * * /bin/sh /root/exercise/backup_crontab.sh