今天某部门又发生了一次crontab被删事件,想起了上次一位同事误执行crontab -r导致计划任务被删除的事。
crontab -e 修改当前用户的计划任务
crontab -l 列出当前用户的计划任务
crontab -r 删除当前用户的 所有 计划任务,而且是直接删除,没有任何提示。
在键盘上e和r紧挨着,这就造成了一不小心清空了所有定时任务。如果没有crontab计划任务备份,就只能从crontab日志里捞任务了,万一有那种间隔长时间运行一次的计划任务,想要不遗漏任务,只能拼记忆力了。
万一是线上重要服务器,会瞬间体验到灵魂出窍的感觉,还得假装很镇定,先找SSH的buffer,再找crontab日志,联系相关童鞋协助恢复,然后祈求能够完整恢复。这种体验,想想都酸爽~
解决这种悲剧有3中方法:
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末尾添加aliasalias crontab='/your cron.sh directory../cron.sh'
SSH退出重新登录
4、备份大法好:
备份是一件很严肃的事情!