crontab是每个运维一线人员必须掌握的技术,熟练运用crontab可以自动帮助我们执行重复性的工作,提高运维的工作效率。它就像一个闹钟,在特定的时间,准时响应并执行相应的任务。如果你的工作经常与Linux打交道,那么你可以继续往下看,了解crontab的一般性故障排查。

本次的故障发生在生产环境的一台云服务器上,每日凌晨2点15执行数据库的mysqldump备份任务,保留最近的三天备份,删除之前多余的备份文件。当第四天执行完计划任务的时候发现本地备份目录中居然还存留三天前的压缩备份文件,调试脚本检查并无问题后,手动执行crontab的脚本,发现crontab能完全正确执行,而第二天再次通过crontab的方式执行发现仍然多保留了一天的压缩备份文件。(这里可以通过touch命令新建空文件或者修改文件时间来模拟)

通过与其他同行沟通并谷歌或百度搜索,发现了两种解决这种问题的方案,如下是我的本次故障的排查流程。因故障发生于阿里云的生产服务器,故障排查的现象过程不便于重现,敬请谅解,对于生产服务器我们还是应当谨慎的操作,不便于做测试任务。

【故障情景】

一台阿里云的云服务器,crontab手动和自动均能执行备份任务,自动执行后备份的文件相对只保留三天却多保留一天,而手动执行却能保存三天的备份,而本地的物理机就能成功执行,只有云服务器多保留一天的备份。

#删除未压缩的备份目录
function rm_oldfile()
{
cd $backupdir
find ./ -type f -mtime +2 -exec rm {} \;
} #需要清理备份的时候把下面注释去掉,天数可以自行修改
rm_oldfile;

【故障分析】

crontab出现故障,会有两个原因,一个是命令路径的问题,另一个就是环境变量的问题。

【故障排查】
  命令路径都是正确,且相关命令是绝对路径,crontab自动执行不会出现问题。
  第一种解决办法:通过手动加载环境变量,发现问题得到解决,添加如下的登陆shell变量加载。
#!/bin/bash
. /etc/profile
. ~/.bash_profile

第二种解决办法:加if判断,检查备份文件的数量,如果大于正常值,则再执行find ./ -type f -mtime +2 -exec rm {} \;命令。

function rm_agofile()
{
cd $backupdir
if (($(ls -lh /opt/dump_ibg_mall/|grep ".*.tar.gz"|wc -l) > 3))
then
find ./ -type f -mtime +2 -exec rm -rf {} \;
else
echo "there is no more than 3" >>/tmp/dump_ibg_mall_result.log
fi
}
#rm_agofile;

【故障总结】

  crontab的脚本里命令必须绝对路径,或者环境变量可能不会被加载。除了上述两种方式,我们也可以配合if判断,通过其他的逻辑方式来达到我们的需求。

crontab的mysqldump备份任务未能完全正确执行的故障处理的更多相关文章

  1. mysqldump备份原理

    现网中数据库运维时,要经常对数据库做热备.为保证恢复时数据的完整性与一致性, 一种方法是在备份之前锁表,但锁表会影响正在运行的业务. mysqldump是当前MySQL中最常用的备份工具,通过mysq ...

  2. Mysqldump备份说明及数据库备份脚本分享-运维笔记

    MySQLdump是MySQL自带的导出数据工具,即mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中.Mysqldump是一个客户端逻辑备份的工 ...

  3. mysql的日志及利用mysqldump备份及还原

    日志文件:6类       一般查询日志:log,general_log,log_output       慢查询日志:       错误日志       二进制日志       中继日志       ...

  4. MySQL运维之---mysqldump备份、select...into outfile、mysql -e 等工具的使用

    1.mysqldump备份一个数据库 mysqldump命令备份一个数据库的基本语法: mysqldump -u user -p pwd dbname > Backup.sql 我们来讲解一下备 ...

  5. 028:基于mysqldump备份脚本

    MySQL Backup and Recovery 一 MySQL Backup 1.功能 mysqldump全量和增量备份,通过最近一次备份刷新产生binlog来定位执行增量. 脚本下载地址 git ...

  6. mysqldump备份与基于bin-log实现完全恢复

    MySQL数据库备份是一项非常重要的工作,mysql的备份主要分为逻辑备份和物理备份,同时,不同的生产环境要备份的策略也不会不同.下面先说一说备份时要考虑到的一些因素,然后再实际操作进行不同方式的数据 ...

  7. MySQL备份和恢复[3]-mysqldump备份工具

    mysqldump 概述 逻辑备份工具: mysqldump, mydumper, phpMyAdmin Schema和数据存储在一起.巨大的SQL语句.单个巨大的备份文件 mysqldump:是My ...

  8. 使用Mysqldump 备份数据库

    使用Mysqldump 备份数据库 1.备份一个数据库 mysqldump --user [user name] --password=[password] [database name] >  ...

  9. mysqldump备份7

    http://www.cnblogs.com/ivictor/p/5505307.html   对于MySQL的备份,可分为以下两种: 1. 冷备 2. 热备 其中,冷备,顾名思义,就是将数据库关掉, ...

随机推荐

  1. UML 中extend和include的区别

    在UML用例图中有两种关系——包含和扩展,容易混淆,下面通过一张表来区别一下这两种关系.

  2. 开发IOS应用真的一定要买苹果电脑设备吗?

    不要忘记目的 如果你想开发ios或者苹果的app,网上很多网友都会建议你买一个苹果硬件--苹果电脑,一部分建议你安装黑苹果.这两种方案中前一种费用很高,后一种费时费力(甚至到最后都要转向购买apple ...

  3. 直播-srs起步

    srs简介 https://github.com/ossrs/srs/wiki/v2_CN_Home     原料 CentOS Linux release 7.2.1511 (Core) ffmpe ...

  4. Unity3D UGUI强制刷新Layout(布局)组件

    UGUI的Layout布局组件确实节省了我们很多代码 如果不使用Layout组件 那么光在计算UI的布局上就要花费很大的功夫 特别是动态生成其组件的时候 当然,Layout组件在大多数时候是非常好用的 ...

  5. 设计模式——工厂方法模式(C++实现)

    #include <iostream> #include <string> using namespace std; class CProduct { public: ; }; ...

  6. 集合中存的是引用,分析一道容易混淆的Java面试题

    我们自定义的类是以引用的形式放入集合,如果使用不当,会引发非常隐蔽的错误.就拿我经常问到的一个面试题来说明这个知识点. 第一步,我们定义一个Car类型的类,其中只有一个int类型id属性. 第二步,创 ...

  7. PPT分享 | 怎么在区块链上保护隐私?

    艾伯特AI人工智能(公众号:aibbtcom)按: (编者按:在12月3日的亚太区以太坊社区培训和交流Meetup深圳站上,Vitalik作了<怎么在区块链上保护隐私>的演讲,谈到了区块链 ...

  8. VS调试再次遭遇“应用程序中断模式”问题,附解决方法

    最近重构某项目过程中发现的,有同事反馈调试不正常,很久以前也发生过,虽然搜索了一下找到解决方案,但个人觉得还是有必要再记录一下. 调试某CS结构的应用程序,大致效果可以看下图: 我们组最终解决方案是: ...

  9. KVM之二:配置网络

    1.安装KVM a.通过yum安装虚拟化的软件包 [root@kvm ~ ::]#yum install -y kvm virt-* libvirt bridge-utils qemu-img 说明: ...

  10. [活动] 【奖品撩人】部落守卫者集结令·这一回同程SRC的安全由“我”守卫!

    i春秋SRC部落联合同程SRC发布首届部落守卫者漏洞提交任务(代号G001)! 你准备好了吗! [部落守卫者集结令]拿巨额奖金?上白帽子排行榜?近距离膜拜大佬?学技术?掌握窍门?又或者你是个责任感爆棚 ...