日志备份Shell脚本和数据库数据备份脚本

备份日志基本是每一个生产项目必备的功能之一,一般备份日志,就需要shell脚本,先附上自己写的脚本代码,随后再进行简单讲解。第一个shell脚本,bak.sh代码如下:

#!/bin/sh

. /home/efina/.bash_profile;

cd /home/efina/apache-tomcat-7.0.65/logs;

d=$(date "+%Y%m%d%H%M%S");

sold="catalina.out";

file=${sold}${d};

echo $file;

cp /home/efina/apache-tomcat-7.0.65/logs/catalina.out /home/efina/logback/${file};  #备份

gzip /home/efina/logback/${file}    #压缩

cat /dev/null > /home/efina/apache-tomcat-7.0.65/logs/catalina.out;

rm  -f /home/efina/apache-tomcat-7.0.65/logs/*.log*;

rm  -f /home/efina/apache-tomcat-7.0.65/logs/*.txt;

rm -f /home/efina/eFina/logs/*.log*

dbuser=efina;
dbpassword=efina;
dbserver=localhost;
dbname=efina;
dbopt=--opt

mysqldump -u$dbuser -p$dbpassword -h$dbserver $dbopt $dbname >  /home/efina/backup/sqlbak/${d}.sql;

rm -f /home/efina/backup/sqlbak/*.gz

gzip /home/efina/backup/sqlbak/${d}.sql

前面五行命令比较简单,就是文件名格式,想要备份的日志文件名,统一为catalina.out20190321102516(日志名+当日时间)的格式,随后用cp命令备份!

后面6行,就是简单的压缩和删除,最后几行,是备份数据库的数据命令。
第二个shell脚本,export.sh:

#!/bin/sh


. /home/efina/.bash_profile;

cd /home/efina/print/; 

d=$(date "+%Y%m%d");
dir="/home/efina/print/exportTable/";

rm -f /home/efina/print/exportTable/*;

limitNote="T_PAY_LIMIT_AD_NOTE.txt";
limitFile=${dir}${limitNote};
rm -f ${limitFile};

limitNoteList="T_PAY_LIMIT_AD_NOTE_LIST.txt";
limitListFile=${dir}${limitNoteList};
rm -f ${limitListFile};

limitInit="T_ECFN_LIMIT_INIT.txt";
limitInitFile=${dir}${limitInit};
rm -f ${limitInitFile};

payTransfe="T_PAY_TRANSFE_NOTE.txt";
payTransfeFile=${dir}${payTransfe};
rm -f ${payTransfeFile};

payTransfeList="T_PAY_TRANSFE_NOTE_LIST.txt";
payTransfeListFile=${dir}${payTransfeList};
rm -f ${payTransfeListFile};

areaComp="T_AREA_COMP.txt";
areaCompFile=${dir}${areaComp};
rm -f ${areaCompFile};

ecfnPay="T_ECFN_PAY.txt";
ecfnPayFile=${dir}${ecfnPay};
rm -f ${ecfnPayFile};

ecfnPayList="T_ECFN_PAY_LIST.txt";
ecfnPayListFile=${dir}${ecfnPayList};
rm -f ${ecfnPayListFile};

payBack="T_PAY_BACK.txt";
payBackFile=${dir}${payBack};
rm -f ${payBackFile};

ecfnJrnl="T_ECFN_JRNL.txt";
ecfnJrnlFile=${dir}${ecfnJrnl};
rm -f ${ecfnJrnlFile};

dbuser=efina;
dbpassword=efina;
dbserver=localhost;
dbname=efina;
dbopt=--opt

mysql -u$dbuser -p$dbpassword <

这两个shell脚本都比较简单,也容易理解,写完shell脚本以后,该如何执行呢?

最常见的办法,就是通过Linux系统的定时任务Crontab命令来控制。由于Linux 系统是由 cron (crond) 这个系统服务来控制的(系统服务是默认启动的,用于Linux 系统原本的计划性工作)。所以,使用者自己也可以根据该命令(crontab 命令)设置自己的计划任务(输入cronttab -e即可显示crontab 命令配置):

日志备份Shell脚本和数据库数据备份脚本_第1张图片

补充:什么是crond?

crond 等同于windows下的计划任务,是Linux用来周期性的执行某种任务的一个守护进程,当操作系统安装完后,默认会安装此服务工具且自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

crontab文件格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段:

minute hour day month week command

比如:
30 23 * * * /home/tomcat/tmp/export.sh
10 23 * * * /home/tomcat/tmp/bak.sh

从左到右依次代表:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,一般是自己编写的Shell脚本文件。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下的crontab文件就是系统任务调度的配置文件,/etc/crontab文件包括下面几行:

cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=HOME=/

# run-parts

51 * * * * root run-parts /etc/cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

使用者权限文件:

  • 文件1:/etc/cron.deny
    该文件中所列用户不允许使用crontab命令

  • 文件2:/etc/cron.allow
    该文件中所列用户允许使用crontab命令

  • 文件3:/var/spool/cron/
    所有用户crontab文件存放的目录,以用户名命名

每次测试环境测试时,ps进程、kill进程、日志跟踪,很是麻烦,所以就有了第三个shell脚本——重启服务。该进程比较简单,如下:

ps -ef|grep tomcat|grep -v grep|cut -c 9-15|xargs kill -9
#pskill tomcat
sleep 5
~/tomcat7.0.93/bin/startup.sh
tail -f ~/tomcat7.0.93/logs/catalina.out

然后把该进程名配置进环境变量,输入ls -a即可看到.bash_profile文件,加入:

#PATH=$HOME/ .sh

加入环境变量以后,source一下(如果执行权限不足 需授权)

你可能感兴趣的:(Shell)