crontab 誤刪恢復


經常用crontab -e 編輯定時任務, 某次手賤 命令敲成了 crontab -r, 悲催了

usage:    crontab [-u user] file
    crontab [ -u user ] [ -i ] { -e | -l | -r }
        (default operation is replace, per 1003.2)
    -e    (edit user's crontab)
    -l    (list user's crontab)
    -r    (delete user's crontab)
    -i    (prompt before deleting user's crontab)

 

然后本能驅使我, 趕緊谷歌找解決方案, 查到的全部都是 通過  /var/log/cron* 文件恢復,可是我沒找到有這個文件啊

就在我心灰意冷, 打算憑記憶寫上幾個任務, 其他的慢慢找人恢復的時候, 我靈機一動, 可能日志文件沒在這個目錄呢

於是, 我全局搜索了一下 和 "cron" 有關的文件, 

sudo find / --name "*cron*"

找到了一大堆, 其中有個文件 極其扎眼: “/tmp/crontab.VgsSIK/crontab”

我首先查看了一下文件日期, 是15天之前的文件, 顫抖的雙手,敲下來vim 命令, 哇, 我的世界又恢復了顏色, 正是備份的crontab文件。雖然是15天之前的文件, 也足夠讓我起死回生了

 

>>>>>>>>>>>>>>>>>>>>>>>>

上面是我的故事, 那下面說說如果沒有備份, 有日志文件, 應該怎么做呢

根據日志文件恢復:

cat /var/log/cron* | grep -i "某個用戶" | grep "CMD" | awk -F '(' '{print $3}' | awk -F ')' '{print $1}' | sort -u > crontab_tmp
解釋:
grep -i “某個用戶” :是為了過濾其他用戶的信息
grep "CMD":是需要過濾非命令行
awk -F '(' '{print $3}':是以’(‘為分隔符,提取第三個元素。這里結果為“/home/scripts/check_alive.sh)”
awk -F ')' '{print $1}':是以’)’為分隔符,提取第一個元素。這里結果為“/home/scripts/check_alive.sh”
這時,我們已經提取到自己所需要的命令了,但由於crontab定時觸發,會有大量重復。后面需要進行去重
sort > cmd_tmp:去重后輸出至cmd_tmp文件
后續根據提取出來的命令再去 /var/log/cron文件中確認一下時間間隔,按照指定的方式恢復至/var/spool/cron/

 

>>>>>>>>>>>>>>>>>>>>>>> 定時備份crontab 腳本
這篇文章粘貼過來的, 感謝一下原作者

說明⚠️:每天早上七點對crontab 進行備份 ,同時刪除7天前的數據

腳本如下:

backup_crontab.sh

#!/usr/bin/env bash

BACKUP_DIRECTORY="${HOME}/crontab_backup"

if [ ! -e "${BACKUP_DIRECTORY}" ]; then
        mkdir -p ${BACKUP_DIRECTORY}
fi

crontab -l > ${BACKUP_DIRECTORY}/$(date '+%Y%m%d').txt
find ${HOME}/crontab_backup -mtime +7 -name '*.txt' -exec rm -rf {} \;

說明:

上面腳本中的" find ${HOME}/crontab_backup -mtime +7 -name '*.txt' -exec rm -rf {} \; ",也可以替換成" find ${HOME}/crontab_backup -mtime +7 -name '*.txt' | xargs rm -rf "

 

把上面的腳本放在 crontab 定時任務中執行:

## backup_crontab
0 7 * * * cd /data/siterecoffline && sh backup_crontab.sh

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM