0%

万恶的"crontab -r"

起因

最近检查了一下数据库dump的定时任务,发现有一段时间没有新的dump文件了,准备改一改crontab,然后发生了下面的事故。按crontab -e成了crontab -r,键盘上E和R是邻居,一不小心就没了。

image-20201010130818904

拯救

接下来说说怎么恢复吧

通过命令可以找出以前执行过的命令

1
cat /var/log/cron* | grep CMD | awk -F'CMD' '{print $2}' | awk -F'[(|)]' '{print $2}' | sort -u

防止再发

crontab别名

/usr/bin下面新建cron.sh,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
source ~/.bashrc

if [ "$1" = "-r" ] ; then
echo "My God! Dangerous..."
echo "Exit..."
exit 2
fi

if [ "$1" = "-l" ] ; then
/usr/bin/crontab -l
exit 0
fi

if [ "$1" = "-e" ] ; then
mkdir -p ~/cronbak
/usr/bin/crontab -l > ~/cronbak/cron.bak.$etime.a
/usr/bin/crontab -e
/usr/bin/crontab -l > ~/cronbak/cron.bak.$etime.b
fi
1
chmod +x cron.sh

/etc/bashrc或者~/.bashrc文件最后添加
alias crontab='/usr/bin/cron.sh'

cron.sh作用
1、禁止crontab -r
2、每次编辑都备份 cron 列表到~/cronbak目录下面

-------------    本文结束  感谢您的阅读    -------------
请作者一杯咖啡。