crontab 误删除恢复

事故原因分析:

回忆自己操作过程中,未进行crontab的清空,网上查了下原因,并且复现了下。可能原因如下:

如果在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 添加

反思工作

防止类似事件再次发生,写个简单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 {} \;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值