当用了万恶的crontab -r命令后……
明天计划上个新的应用,需要写脚本获取服务器状态并写入数据库,下午写完脚本,准备先放cron里测试一下.登进服务器,想敲crontab -e加一条计划,结果手一滑就敲成了crontab -r,然后就悲剧了,发现没有备份! 没办法,想办法恢复吧.想了想,这种情况,只能去找cron的日志来恢复了.花了点时间,最终还是恢复了.先把crontab文件全部备份一下,然后在这里记录一下恢复过程,或许谁跟我一样悲剧就能用到了.不过我是不想再次悲剧了. 这台机器上crontab的计划有3种,每天运行1次的,每天运行多次的,特定时间运行的.(注:出问题的日期2011-9-1日,用户为wwiiol) 1、恢复每天执行1次的计划 执行下面的命令,就可以获取每天运行1次的计划,然后写入crontab就可以恢复每天运行1次计划了: grep ''Aug 31.*wwiiol.*CMD'' /var/log/cron* | sed ''s/.*\([0-2][0-9]:[0-5][0-9]:[0-5][0-9]\).*CMD (\(.*\))/\1 \2/g'' | sort -k 3 | uniq -f 1 -u | sed ''s/^\([0-2][0-9]\):\([0-5][0-9]\):\([0-5][0-9]\)/\2:\1 * * */g;s/^0//g;s/\(\):0/\1:/g;s/\([0-9]*\):\([0-9]* \*\)/\1 \2/g'' 2、恢复每天执行多次的计划 执行下面命令找出这些计划,然后在分析具体的执行计划: grep ''Aug 31.*wwiiol.*CMD'' /var/log/cron* | sed ''s/.*CMD (\(.*\))/\1/g'' | sort -n | uniq -c 找到的一条计划的命令: 288 /home/program/playnet_rsync.sh all 这个计划每天运行288次,很容易算出是每5分钟运行1次,再看日志确实是这样的,于是将 */5 * * * * /home/program/playnet_rsync.sh all 写入crontab文件来恢复计划; 还有一条: 6 /bin/sh /home/wwiiol/test/stat.sh 这个计划每天执行了6次,可能是每4小时执行1次,去看日志,发现: /var/log/cron:Aug 31 02:00:01 gdb12 CROND[8406]: (wwiiol) CMD (/bin/sh /home/wwiiol/test/stat.sh) 原来是2点到3点之间每10分钟执行一次,将 */10 2 * * * /bin/sh /home/wwiiol/test/stat.sh 写入crontab文件来恢复计划. 3、恢复特定时间运行的计划 这一项是可能存在无法恢复的情况的,日志记录的时间是有限的,很可能半年运行一次,甚至一个月运行一次的计划都无法通过日志找出.幸运的话,仔细分析日志就可以找出. 查看日志,发现共有有一个多月的日志,执行命令: grep ''wwiiol.*CMD'' /var/log/cron* | sed ''s/.*CMD (\(.*\))/\1/g'' | sort -n | uniq -c 可得结果: 32 /bin/sh /home/wwiiol/backup.sh 对比已 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |