万恶的"crontab -r"

警告
本文最后更新于 2022-07-01,文中内容可能已过时。

摘要

最近检查了一下数据库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目录下面