備份日志基本是每一個生產(chǎn)項目必備的功能之一,一般備份日志鸟废,就需要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}$hjjbr3x;
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/$xtjbrlr.sql;
rm -f /home/efina/backup/sqlbak/*.gz
gzip /home/efina/backup/sqlbak/$rpbl5zl.sql
前面五行命令比較簡單滤港,就是文件名格式,想要備份的日志文件名趴拧,統(tǒng)一為catalina.out20190321102516(日志名+當(dāng)日時間)的格式溅漾,隨后用cp命令備份!
后面6行著榴,就是簡單的壓縮和刪除添履,最后幾行,是備份數(shù)據(jù)庫的數(shù)據(jù)命令脑又。
第二個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 <<EOF ;
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腳本以后叔壤,該如何執(zhí)行呢?
最常見的辦法口叙,就是通過Linux系統(tǒng)的定時任務(wù)Crontab命令來控制炼绘。由于Linux 系統(tǒng)是由 cron (crond) 這個系統(tǒng)服務(wù)來控制的(系統(tǒng)服務(wù)是默認(rèn)啟動的,用于Linux 系統(tǒng)原本的計劃性工作)妄田。所以俺亮,使用者自己也可以根據(jù)該命令(crontab 命令)設(shè)置自己的計劃任務(wù)(輸入cronttab -e即可顯示crontab 命令配置):
補充:什么是crond?
crond 等同于windows下的計劃任務(wù)疟呐,是Linux用來周期性的執(zhí)行某種任務(wù)的一個守護進程脚曾,當(dāng)操作系統(tǒng)安裝完后,默認(rèn)會安裝此服務(wù)工具且自動啟動crond進程启具,crond進程每分鐘會定期檢查是否有要執(zhí)行的任務(wù)本讥,如果有要執(zhí)行的任務(wù),則自動執(zhí)行該任務(wù)鲁冯。
crontab文件格式共分為六個字段拷沸,前五段是時間設(shè)定段,第六段是要執(zhí)行的命令段:
minute hour day month week command
比如:
30 23 * * * /home/tomcat/tmp/export.sh
10 23 * * * /home/tomcat/tmp/bak.sh
從左到右依次代表:
minute: 表示分鐘薯演,可以是從0到59之間的任何整數(shù)撞芍。
hour:表示小時,可以是從0到23之間的任何整數(shù)跨扮。
day:表示日期序无,可以是從1到31之間的任何整數(shù)验毡。
month:表示月份,可以是從1到12之間的任何整數(shù)帝嗡。
week:表示星期幾晶通,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日哟玷。
command:要執(zhí)行的命令狮辽,一般是自己編寫的Shell腳本文件。
Linux下的任務(wù)調(diào)度分為兩類碗降,系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度隘竭。
系統(tǒng)任務(wù)調(diào)度:系統(tǒng)周期性所要執(zhí)行的工作塘秦,比如寫緩存數(shù)據(jù)到硬盤讼渊、日志清理等。在/etc目錄下的crontab文件就是系統(tǒng)任務(wù)調(diào)度的配置文件尊剔,/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
用戶任務(wù)調(diào)度:用戶定期要執(zhí)行的工作爪幻,比如用戶數(shù)據(jù)備份、定時郵件提醒等须误。用戶可以使用 crontab 工具來定制自己的計劃任務(wù)挨稿。所有用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致京痢。
使用者權(quán)限文件:
文件1:/etc/cron.deny
該文件中所列用戶不允許使用crontab命令文件2:/etc/cron.allow
該文件中所列用戶允許使用crontab命令文件3:/var/spool/cron/
所有用戶crontab文件存放的目錄,以用戶名命名
每次測試環(huán)境測試時奶甘,ps進程、kill進程祭椰、日志跟蹤臭家,很是麻煩,所以就有了第三個shell腳本——重啟服務(wù)方淤。該進程比較簡單钉赁,如下:
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
然后把該進程名配置進環(huán)境變量,輸入ls -a即可看到.bash_profile文件携茂,加入:
#PATH=$HOME/ .sh
加入環(huán)境變量以后你踩,source一下(如果執(zhí)行權(quán)限不足 需授權(quán))