java shell spool_三个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命令备份!

1bbc75210704

命令演示.png

后面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 <

use efina;

SELECT * INTO OUTFILE '${limitFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_PAY_LIMIT_AD_NOTE;

SELECT * INTO OUTFILE '${limitListFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_PAY_LIMIT_AD_NOTE_LIST;

SELECT * INTO OUTFILE '${limitInitFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_ECFN_LIMIT_INIT;

SELECT * INTO OUTFILE '${payTransfeFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_PAY_TRANSFE_NOTE;

SELECT * INTO OUTFILE '${payTransfeListFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_PAY_TRANSFE_NOTE_LIST;

SELECT * INTO OUTFILE '${areaCompFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_AREA_COMP;

SELECT * INTO OUTFILE '${ecfnPayFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_ECFN_PAY;

SELECT * INTO OUTFILE '${payBackFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_PAY_BACK;

SELECT * INTO OUTFILE '${ecfnJrnlFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_ECFN_JRNL;

SELECT * INTO OUTFILE '${ecfnPayListFile}' CHARACTER SET GBK FIELDS TERMINATED BY '|' FROM T_ECFN_PAY_LIST;

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

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

1bbc75210704

crontab命令.jpg

补充:什么是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一下(如果执行权限不足 需授权)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值