操做過程當中: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