背景描述:
某次,同事告知有台服务器上的crontab里面的任务全部都没有了,要我帮忙查一下,幸好crontab内容有备份。于是就先恢复了crontab的任务。 再具体查一下是由人为操作导致的还是其他情况
问题排查:
检查一下所有的history记录,发现没有crontab -r之类的操作(已知的是只有crontab -r可以直接清空定时任务),当然执行crontab -e编辑也可以清空,但这种情况还是排除啦
但是发现有crontab之类的操作,大家都知道执行crontab不加任何参数,命令行会卡在那里,但一般不会对crontab里面的内容有影响。
通过询问操作过该服务器的同事及相关日志,大胆做出以下测试:
场景重现:
1. 先查看一下机器上的crontab内容
$ crontab -l
* * * * * pwd
2. 在命令行模式下,不带任何参数执行一下crontab命令
$ crontab
3. 直接关闭会话(Close或Discount都行)(模拟网络质量差,或程序异常中止等情况)
4. 再次查看crontab内容,发现内容被清空
$ crontab -l
$
预防方案: crontab定时备份
修改crontab前,先对当前crontab进行备份
添加crontab和crontab -r的alias
Crontab没有备份时如何处理:
只能通过分析/var/log/cron日志,提取执行的内容,并找到时间规律。欢迎提出更好的办法呀