zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    QQ邮箱开启SMTP服务的步骤
    delete
    (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
    (四)SAX方式解析XML数据
    If-Modified-Since页面是否更新
    基于分块统计和机器学习的主题类网页内容识别算法实现和应用范例
    文本去重第一步:基于内容的文本相似性计算
    java中int,float,long,double取值范围,内存泄露
    Linux多线程服务端编程:使用muduo C++网络库
    HttpClient使用详解
  • 原文地址:https://www.cnblogs.com/zhang-can/p/11764139.html
Copyright © 2011-2022 走看看