• 工作中实用的Shell脚本实例


    转自:https://www.jianshu.com/p/093d712c777d

    1. 扫描主机端口状态
    #!/bin/bash
    HOST=$1
    PORT="22 80 8080 3306"
    for PORT in $PORT; do
        if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then
            echo "$PORT open"
        else
            echo "$PORT close"
        fi
    done
    2. 代码上线脚本
    #!/bin/bash
    # code online
    # author: ren
    PROJT_DIR=/usr/local/nginx/html
    OLD_DIR=/usr/local/nginx/html/web1
    PROJT=web1
    BACKUP_DIR=/data/backup
    DATA_CHMOD=www
    DATE=`date +%F`
    NEW_DIR=/data/web1
    # 关闭nginx
    function stop_nginx() {
      /usr/bin/systemctl stop nginx
      if [ $? -eq 0 ];then
         echo "nginx is stopd"
      else
         echo "nginx is not stop please check..."
         exit 1
      fi
    }
    
    #2 备份原有数据
    function backup_data() {
      if [ -d $BACKUP_DIR/$DATE'-'$PROJT ];then
        echo "DIR $BACKUP_DIR/$DATE'-'$PROJT is exist"
        exit 2
      else
        mv $OLD_DIR $BACKUP_DIR/$DATE'-'$PROJT
      fi
    }
    
    # 3移动新的代码 项目目录  注:此代码目录需手动上传解压 
    function new_code() {
      if [ -d $NEW_DIR ];then
         mv $NEW_DIR $PROJT_DIR
      else
         echo "NEW_DIR is not exist"
         exit 3
      fi
    }
    
    # 4 修改权限
    function chmod_news() {
      chown -R $DATA_CHMOD.$DATA_CHMOD $OLD_DIR
    }
    
    # 5 启动服务
    function start_nginx() {
      /usr/bin/systemctl start nginx
      if [ $? -eq 0 ];then
        echo "nginx start ok"
      else
        echo "ngin is not start,please check..."
      fi
    }
    
    stop_nginx
    backup_data
    new_code
    chmod_news
    start_nginx
    3. 检测MySQL主从复制是否异常
    #!/bin/bash
    user="root"
    password="123456"
    mycmd="mysql -u$user -p$password -h 192.168.1.88"
    
    function chkdb() {
    list=($($mycmd -e "show slave status G"|egrep "Running|Behind"|awk -F: '{print $2}'))
    if [ ${list[0]} = "Yes" -a ${list[1]} = "Yes" -a ${list[2]} -lt 120 ]
    then echo "Mysql slave is ok"
    else echo "Mysql slave replation is filed"
    fi
    }
    
    function main() {
    while true
    do chkdb
       sleep 3
    done
    }
    main
    4. MySQL数据库备份脚本(mysqldump)
    #!/bin/bash
    #删除15天以前备份
    
    source /etc/profile           #加载系统环境变量
    source ~/.bash_profile    #加载用户环境变量
    set -o nounset             #引用未初始化变量时退出
    #set -o errexit             #执行shell命令遇到错误时退出
    
    user="root"
    password="123456"
    host="localhost"
    port="3306"
    #需备份的数据库,数组
    db=("test")
    #备份时加锁方式,
    #MyISAM为锁表--lock-all-tables,
    #InnoDB为锁行--single-transaction
    lock="--single-transaction"
    mysql_path="/usr/local/mysql"
    backup_path="${mysql_path}/backup"
    date=$(date +%Y-%m-%d_%H-%M-%S)
    day=15
    backup_log="${mysql_path}/backup.log"
    
    #建立备份目录
    if [ ! -e $backup_path ];then
        mkdir -p $backup_path
    fi
    
    #删除以前备份
    find $backup_path -type f -mtime +$day -exec rm -rf {} ; > /dev/null 2>&1
    
    echo "开始备份数据库:${db[*]}"
    
    #备份并压缩
    backup_sql(){
        dbname=$1
        backup_name="${dbname}_${date}.sql"
        #-R备份存储过程,函数,触发器
        mysqldump -h $host -P $port -u $user -p$password $lock --default-character-set=utf8 --flush-logs -R $dbname > $backup_path/$backup_name    
        if [[ $? == 0 ]];then
            cd $backup_path
            tar zcpvf $backup_name.tar.gz $backup_name
            size=$(du $backup_name.tar.gz -sh | awk '{print $1}')
            rm -rf $backup_name
            echo "$date 备份 $dbname($size) 成功 "
        else
            cd $backup_path
            rm -rf $backup_name
            echo "$date 备份 $dbname 失败 "
        fi
    }
    
    #循环备份
    length=${#db[@]}
    for (( i = 0; i < $length; i++ )); do
            backup_sql ${db[$i]} >> $backup_log 2>&1
    done
    
    echo "备份结束,结果查看 $backup_log"
    du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'
     
     
     
     
  • 相关阅读:
    Java作业一 (2017-9-10)
    遇到的坑1:传奇SF找不到背包数组
    黑白逆向编程课程笔记 18.局部&全局变量&参数详解
    黑白逆向编程课程笔记 16.浮点指令
    黑白逆向编程课程笔记 13.堆栈
    黑白逆向编程课程笔记 11.寄存器&补充
    SVN的trunk branches tags(一)
    JBoss Resteasy是一个遵守JAX-RS 标准的REST的开源项目
    JBOSS是sun公司的应用程序服务器,就象weblogic,jboss包含tomcat的所有功能.
    软件架构(体系结构,Architecture)和软件框架
  • 原文地址:https://www.cnblogs.com/vzhangxk/p/15267618.html
Copyright © 2020-2023  润新知