Shell脚本
Reference
Shell笔记
shell自动清理30天以上的文件
shell自动备份PVE里的虚拟机系统文件
chatgpt做的自动备份pve镜像
shell 定时备份文件夹脚本以及删除过期备份
写一个断电按顺序自动关闭服务器的脚本
GPT:自动停止服务,控制关机
GPT: Shell 停止Docker 应用
GPT: Shell从文档读取配置信息
Shell传参给脚本,带参数运行
GPT:Shell停止Systemd服务
停止Moosefs服务
StartMoosefs.sh
StopMoosefs.sh
StopDocker.sh
StopSysyemService.sh
备份脚本
Linux运维常用脚本总结
网卡绑定bond配置脚本
自动取文件脚本
shell脚本: 同步两个本地文件夹
分割mysql-slow慢日志的脚本
解压不成功退出整个解压
Linux操作 :批量截取文件第一列,去重
文本的一些操作
nginx监控脚本
监控tomcat脚本
kafka监控脚本
zookeeper监控启动脚本
本文档使用 MrDoc 发布
-
+
首页
Linux运维常用脚本总结
## 1.日志切割 ``` # nginx 日志分割日志 #!/bin/bash --login shopt -s expand_aliases datestr=$(date -d "-1 days" +%Y-%m-%d) echo $datestr; mv /test/log/nginx/access.log /test/log/nginx/access_${datestr}.log mv /test/log/nginx/error.log /test/log/nginx/error_${datestr}.log sleep 1 service nginx reload ``` ## 2.删除日志脚本 ``` #!/bin/bash --login shopt -s expand_aliases #日志保留天数 log_max_stay_days=7 # 根据时间删除指定路径下的log文件 function del_log_by_time(){ dir=$1 days=$2 filePattern=$3 if [ -d ${dir} ] && [ ${#dir} -gt 2 ]; then rm -f ${dir}/*.`date -d '-'${days}' days' +%Y-%m-%d`.* find ${dir} -mtime +$((days-1)) -name "${filePattern}" -exec rm -f {} \; fi } function del_log(){ # 删除tomcat日志 del_log_by_time "/test/tomcat/logs" $log_max_stay_days "*.*" # 删除nginx日志 del_log_by_time "/test/log/nginx" $log_max_stay_days "*.log" # 删除redis日志 del_log_by_time "/test/log/redis" $log_max_stay_days "*.log" } del_log $@ ``` ## 3.数据备份 ``` # 临时备份,通常用xtrabackup做全量和增量备份。 #!/bin/bash DB_USER=root DB_PWD=123 DB_PORT=3306 DB_HOST=127.0.0.1 # 本机部署时,请将MEDIA_SERVER改为localhost或者置为空 MEDIA_SERVER= SSH_PORT=22 BACKUP_BIZ=1 #数据库名称 DATABASE_BIZ="db1,db2,db3" back_path=/test/backup/A_db_bak_noce_a_week/ #备份最少保留天数 file_backup_max_stay_days=7 function get_databases() { DATABASES="" if [ "$BACKUP_BIZ" == "1" ];then DATABASES=$DATABASE_BIZ fi DATABASES=${DATABASES##,} if [ "$DATABASES" == "" ];then ERROR_INFO="配置了不导出BIZ及STAT" return 1 fi return 0 } # 根据时间删除指定路径下的log文件 function del_log_by_time(){ dir=$1 days=$2 filePattern=$3 dirFlag=$4 if [ -d ${dir} ] && [ ${#dir} -gt 2 ]; then if [ "${dirFlag}" == "1" ];then find ${dir} -mtime +$((days-1)) -type d -name "${filePattern}" -exec rm -rf {} \; else find ${dir} -mtime +$((days-1)) -name "${filePattern}" -exec rm -f {} \; fi fi } #复制到多媒体路径 function move_to_media_server() { to_move_file=$1 if [ "$MEDIA_SERVER" == "localhost" ] || [ `ifconfig |grep "$MEDIA_SERVER "|wc -l` -gt 0 ];then ERROR_INFO="多媒体服务即本机,无需上传" return 1 fi if [ "$MEDIA_SERVER" == "" ];then ERROR_INFO="未能获取多媒体服务器" return 1 fi # 判断免密状态,无则不复制 if [ `cat /root/.ssh/known_hosts |grep -E "$MEDIA_SERVER |$MEDIA_SERVER," |wc -l` -lt 1 ];then ERROR_INFO="未设置免密登录到$MEDIA_SERVER" return 1 fi hostname=$(hostname) ssh -p $SSH_PORT -o "StrictHostKeyChecking no" root@$MEDIA_SERVER "mkdir -p $back_path/${hostname}" scp -r -P $SSH_PORT $to_move_file root@$MEDIA_SERVER:$back_path/${hostname}/ return 0 } # 全量备份 function backup_full() { echo "开始全量备份...." get_databases if [ "$DATABASES" == "" ];then SUCCESS_FLAG=0 else OLD_IFS=$IFS IFS="," db_arr=($DATABASES) cd $back_path for dbname in ${db_arr[@]} do mydumper -h $DB_HOST -u $DB_USER -p $DB_PWD -P $DB_PORT -G -E -R -B $dbname -o ${dbname}_$(date +%Y-%m-%d)/ -v 3 -t 3 -k SUCCESS_FLAG=$? tar czf ${dbname}_$(date +%Y-%m-%d).tar.gz ${dbname}_$(date +%Y-%m-%d)/ rm -rf ${dbname}_$(date +%Y-%m-%d)/ move_to_media_server ${back_path}/${dbname}_$(date +%Y-%m-%d).tar.gz if [ $? -eq 1 ];then echo $ERROR_INFO fi del_log_by_time "${back_path}" $file_backup_max_stay_days "${dbname}_*.tar.gz" del_log_by_time "${back_path}" $file_backup_max_stay_days "${dbname}_*.log" done fi echo "结束备份!" } function run() { if [ "$DB_PORT" == "" ];then DB_PORT=3306 fi backup_full } run $@ 4.过滤大表导出数据库 #!/bin/bash #execute all script in specified directory dt=`date +%Y%m%d%H%M` db_IP=127.0.0.1 # 测试库IP db_pass=abc@123 # 测试库密码 db_name=test # 测试库名称 db_port=3306 # 测试库端口 MAX=100 #大表定义,将不会导出超过100MB的表 dir=exp_$dt #导出目录 cd /test mkdir $dir # 导出 echo "查询 测试库大于$MAX的大表,并存入big_test.txt" mysql -uroot -h$db_IP -p$db_pass -P$db_port -N -e "select concat('$db_name.', TABLE_NAME) from (SELECT TABLE_NAME,DATA_LENGTH,INDEX_LENGTH,(DATA_LENGTH+INDEX_LENGTH) as length,TABLE_ROWS,round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,3) as total_size FROM information_schema.TABLES WHERE TABLE_SCHEMA='$db_name' ) a where a.total_size>$MAX;" >>/test/$dir/big_test.txt echo "已找到" #排除大表导出 mydumper -h $db_IP -u root -p $db_pass -P $db_port -G -E -R -B $db_name -O /test/$dir/big_test.txt -o /test/$dir/test -v 3 -t 4 -k #单独导出大表结构,无数据 cat /test/$dir/big_test.txt |while read line do mysqldump -h$db_IP -uroot -p$db_pass -d $db_name ${line#*.} >> /test/$dir/$line.sql echo $line done echo "导出 测试库成功!" ```
dz
2023年7月20日 09:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码