计算机技术
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
http://www.cnblogs.com/montya/archive/2011/09/04/shell.html