论crontab -r的危害性及预防措施

标签:

0x01 起因

今天某部门又发生了一次crontab被删事件,想起了上次一位同事误执行crontab -r导致计划任务被删除的事。

crontab -e 修改当前用户的计划任务
crontab -l 列出当前用户的计划任务
crontab -r 删除当前用户的所有计划任务,而且是直接删除,没有任何提示。

在键盘上e和r紧挨着,这就造成了一不小心清空了所有定时任务。如果没有crontab计划任务备份,就只能从crontab日志里捞任务了,万一有那种间隔长时间运行一次的计划任务,想要不遗漏任务,只能拼记忆力了。

万一是线上重要服务器,会瞬间体验到灵魂出窍的感觉,还得假装很镇定,先找SSH的buffer,再找crontab日志,联系相关童鞋协助恢复,然后祈求能够完整恢复。这种体验,想想都酸爽~

解决这种悲剧有3中方法:

  1. 捞日志,呼叫场外帮助
  2. 先列出再编辑
  3. alias别名
  4. 备份大法好

0x02 解决方法

1、捞日志:

crontab日志在/var/log/cron
祝君好运。

2、先列出再编辑:

这招算是保险操作了,就算crontab有备份,每次编辑之前先crontab -l列出计划任务,再crontab -e编辑也是极好的习惯。

加上crontab备份就是双保险。

这招需要SSH客户端设置足够的buffer,不然也是白搭。

3、alias别名:

shell脚本cron.sh:

#!/bin/sh  
source /etc/profile;  
source ~/.bash_profile; 

etime=`date -d "0 days ago" +%Y%m%d_%H%M%S`  

if [ "$1" = "-r" ] ; then  
    echo "Warning:Prohibit the use of this command..."  
    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  >  ~/bak/cron.bak.$etime.a  
    /usr/bin/crontab -e  
    /usr/bin/crontab -l  >  ~/bak/cron.bak.$etime.b  
fi

给shell脚本增加执行权限,chmod +x cron.sh

在/etc/bashrc末尾添加alias
alias crontab='/your cron.sh directory../cron.sh'

SSH退出重新登录

4、备份大法好:

备份是一件很严肃的事情!


评论已关闭