shell监控自动备份是否成功(判断文件是否存在)

引入

在我们实现每天自动打包生成备份sql文件后(MySql自动备份并删除指定日期前的数据),需要对运行情况做一个邮件监控,很简单的几句脚本就可以搞定啦。

实现

  1. 创建mysql_bak_warning.sh,目录为/data/mysql_bak
    # touch /data/mysql_bak/mysql_bak_warning.sh
    写入:

    #Crontab time 00:22
    
    # variables
    FILE_DIR=/data/mysql_bak/   #备份存放路径
    DATE=`date +%Y_%m_%d`      #获取当前系统时间
    FILE_NAME="mysqldata_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
    FILE=${FILE_DIR}${FILE_NAME}
    
    #echo "$FILE"
    
    # 判断当天备份文件是否生成
    if [ ! -f "$FILE" ];
    then
          echo "####### $DATA #########">> /data/mysql_bak/mysql_bak.err
          echo "MySQL back up $DATE hava not created!" >>    /data/mysql_bak/mysql_bak.err
          echo "MySQL back up $DATE hava not created!" | mail -s "WARN! MySQL back up $DATE hava not created!" [email protected]
    else
          echo "MySQL back up $FILE have exist!"
          echo "MySQL back up successful!"
    fi
    
  2. 修改文件属性,使其可执行

    # chmod +x /data/mysql_bak/mysql_bak_warning.sh 
    
  3. 修改/etc/crontab

    # vi /etc/crontab
    

    在下面添加

    22 00 * * * root  /data/mysql_bak/mysql_bak_warning.sh 
    

    表示每天凌晨00:22执行一次监控警告脚本

  4. 重新启动crond使设置生效

# systemctl restart crond.service #重新启动
  1. 手动执行效果
    # sh mysql_bak_warning.sh 
    MySQL back up /data/mysql_bak/mysqldata_bak_2016_09_06.tar.gz have exist!
    MySQL back up successful!
    

附录:shell脚本对文件和文件夹的判断

#shell判断文件夹是否存在
#如果文件夹不存在,创建文件夹
if [ ! -d "/myfolder" ]; then
  mkdir /myfolder
fi

#shell判断文件,目录是否存在或者具有权限


folder="/var/www/"
file="/var/www/log"

# -x 参数判断 $folder 是否存在并且是否具有可执行权限
if [ ! -x "$folder"]; then
  mkdir "$folder"
fi

# -d 参数判断 $folder 是否存在
if [ ! -d "$folder"]; then
  mkdir "$folder"
fi

# -f 参数判断 $file 是否存在
if [ ! -f "$file" ]; then
  touch "$file"
fi

# -n 判断一个变量是否有值
if [ ! -n "$var" ]; then
  echo "$var is empty"
  exit 0
fi

# 判断两个变量是否相等
if [ "$var1" = "$var2" ]; then
  echo '$var1 eq $var2'
else
  echo '$var1 not eq $var2'
fi

参考

shell bash判断文件或文件夹是否存在

你可能感兴趣的:(shell监控自动备份是否成功(判断文件是否存在))