起因
想看一眼定時任務的時候,手誤打成了-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