shell定时备份mysql脚本以及调用pythod脚本,支持开机启动。
作为一个linux菜鸟,第一次安装ubuntu居然花费了整整一天时间,不小心把win7给整没了。主要还是双系统不兼容,搞的手忙脚乱哎,真痛苦。
这几个脚本虽然简单,但也挺有成就感的。,现学现卖吧。
最近的项目在线上部署很多,不同地市,几乎都有,有些服务器老是出毛病要重启,这就问题来了,服务器上运行了很多程序,要一个个手动去重启,很麻烦,
比较变态的是,我们每台服务器基本上都安装了爬虫程序,如果凌晨重启,没人去管理,很可能网络上有不少重要数据爬不到。于是写了几个shell脚本
一边google一边调试。
好了,不废话
A.mysql定时备份
主要是备份业务表,数据量不大的重要配置数据,每天凌晨1点备份一次,非增量备份。
backupPscmsDb.sh
1 #!/bin/bash
2 set -e
3 HOST="127.0.0.1"
4 #获取当前目录路径
5 BACKUP_PATH=`pwd`
6 #数据库名
7 DATE_NAME="pscms"
8 #表名 以空格分开
9 DATE_TABLE="systemUser systemParam"
10 #账号
11 UAER_NAME="****"
12 #密码
13 PASSWORD="*****"
14 #当前日期 yyyymmdd
15 TIME=`date +%Y%m%d`
16 #判断目录是否存在
17 if [ !-d $BACKUP_PATH/$TIME ]; then
18 mkdir $BACKUP_PATH/$TIME
19 else
20 rm -rf $BACKUP_PATH/$TIME
21 mkdir $BACKUP_PATH/$TIME
22 fi
23 for TABLE_NAME in$DATE_TABLE
24 do
25 mysqldump $DATE_NAME$TABLE_NAME>$BACKUP_PATH/$TIME/$TABLE_NAME.sql
26 done
27 #删除5天前的数据
28 find $BACKUP_PATH-name "201*"-mtime 5-type d -exec rm -rf -fv {} \;
脚本写完后,需要配置到系统中,要用到任务调度功能,以支持定时备份
1 crontab -e
2 #每天凌晨1点定时备份
3 001*** cd /opt/backupPscmsData;./backupPscmsDb.sh
B.调用pythod脚本,支持开机启动
powerAutoRun.sh
1 #!/bin/bash
2 set -e
3 BASEDIR=$(readlink -f$0)
4 BASEDIR=$(dirname $BASEDIR)
5 cd $BASEDIR
6 export BASEDIR=$BASEDIR
7 FILE_NAME="powerAutoRunConf.txt"
8 logtime=`date +%Y-%m-%d\ %T`
9 logfile=`pwd`/powerAutoRun.log
10 cat $FILE_NAME|while read line
11 do
12 #判断读取的链接是文件格式,并且一定要存在
13 if [ -f$line ];then
14 case ${line##*.} in
15 "py")
16 #cd 到该目录
17 cd `dirname $line`
18 #开始执行脚本
19 python `basename $line` restart
20 echo "`date +%Y-%m-%d\ %T` $line 启动成功">>$logfile
21 ;;
22 "sh")
23 $line
24 echo "`date +%Y-%m-%d\ %T` $line 启动成功">>$logfile
25 ;;
26 "*")
27 echo "`date +%Y-%m-%d\ %T` $line 不支持开机启动">>$logfile
28 ;;
29 esac
30 else
31 echo "`date +%Y-%m-%d\ %T` $line 不是文件或者不存在">>$logfile
32 fi
33 done
powerAutoRunConf.txt 贴上你需要启动的脚本路径就行了。目前写的比较简单,只支持shell脚本和pythod脚本。前提这个脚本都需要可执行权限。
另外 要在 /ect/rc.local 中配置这个开机自动启动脚本路径
1 vim /etc/rc.local
2 cd /opt/backupCollectorData;./powerAutoRun.sh
c.切分nginx日志,这个是在网上copy过来的,就当拿来主义了。
nginxSplitLog.sh
1 #!/bin/bash
2 set -e
3 BASEDIR=$(readlink -f$0)
4 BASEDIR=$(dirname $BASEDIR)
5 cd $BASEDIR
6 export BASEDIR=$BASEDIR
7 DAY=7
8 NGINX_APP="/opt/nginx/sbin/nginx"
9 NGINX_LOG="/opt/nginx/logs"
10 FILE_NAME="host.access.log"
11 DATE="host.access"$(date -d "yesterday"+"%Y%m%d").log
12 cd ${NGINX_LOG}
13 mv $FILE_NAME$DATE
14 #重建nginx日志
15 $NGINX_APP-s reopen
16 #删除n天以前的日志
17 find $NGINX_LOG-name "host.access*.jar"-mtime $DAY-type f -exec rm -fv {} \;
这些脚本只注重功能,其他细节的东西没弄了,比如日志记录。以后需要再弄上把
apk备份
#!/bin/bash #备份资源apk,以及相应的图片logo backUpApkInfo() { FILENAME="appStoreApk_`date +%Y%m%d`.tar.gz" FILE_BACKUP_TARGET_PATH="/mnt/appStoreInfoBackup" FILE_BACKUP_SRC_PATH="/opt/dfadmin" if [ ! -d $FILE_BACKUP_TARGET_PATH ]; then mkdir $FILE_BACKUP_TARGET_PATH echo "创建备份源$FILE_BACKUP_TARGET_PATH,开始备份请稍后...." else echo '备份源已经存在,开始备份请稍后....' fi cd $FILE_BACKUP_TARGET_PATH tar zcf $FILENAME $FILE_BACKUP_SRC_PATH } echo '------------start backup apk------------------' CUR_TIME=`date +"%Y-%m-%d %H:%M:%S"` backUpApkInfo LAST_TIME=`date +"%Y-%m-%d %H:%M:%S"` start_data=`date -d "$CUR_TIME" +%s` #把当前时间转化为Linux时间 complete_data=`date -d "$LAST_TIME" +%s` interval=`expr $complete_data-$start_data` #计算2个时间的差 if [ $? -eq 0 ] then echo "---------------backup apk completed time : $interval s-----------------" else echo "--------------------backup apk was error----------------" fi