crontab 误删除恢复

操做过程当中: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

相关文章
相关标签/搜索