操做过程当中:crontab被所有干掉了,利用log恢复过程记录。shell
回忆本身操做过程当中,未进行crontab的清空,网上查了下缘由,而且复现了下。可能缘由以下:bash
若是在SSH远程终端中敲下“crontab”命令以后,远程链接被一些缘由(好比 糟糕的网络,程序异常)意外终止了,那么Crontab计划任务就会被操做系统所清空。听起来很难以想象,可是通过在虚拟机上的屡次测试,它确确实实的发生了。测试方式为 用SecureCRT开一个SSH窗口,而后敲下命令“crontab”,接着在“任务管理器”中直接杀掉SecureCRT进程,再经过另一个SSH窗口执行“crontab -l”,就会发现,全部的计划任务都不存在了。在今天事故发生的时间点上,就有人在服务器上遇到了这样的状况。服务器
获取完整日志和cmd日志。
从日志中恢复出一份最近几天的完整crontab 运行日志和cmd日志,并存储,用于以后完善和核准例行时间。网络
cat /var/log/cron | grep -i "`which cron`" > ./all_temp cat ./all_temp | grep -v "<command>” > ./cmd_temp
获取全部crontab指令。
从日志中恢复一份去重的crontab log。【至关于全部的crontab命令】测试
awk -F'(' '/crond/{a[$3]=$0}END{for(i in a)print a[i]}' /var/log/cron* >crontab.txt
手工恢复:
从crontab.txt 中找出每一条指令,而后在cmd_temp 中匹配运行次数,从新编辑crontab 添加ui
防止相似事件再次发生,写个简单shell脚本,天天对crontab进行备份,备份最近15天的数据。过时清楚操作系统
#!/bin/bash # 天天对crontab 进行备份 ,同时删除最近15天的数据 DATE=$(date +%Y%m%d) crontab -l > /home/work/bak/crontab_$DATE.bak find /home/work/bak/ -mtime +15 -name '*.bak' -exec rm -rf {} \;
本人小站原文连接 .net