shell脚本检测linux服务

#!/bin/bash
#description: 服务巡检脚本

export PATH=/usr/local/nginx/sbin:/usr/local/apache/bin:/usr/local/mysql/bin:/usr/local/redis/bin:/usr/local/php/bin:$PATH

(type -a nc || yum install nc -y) &> /dev/null

create_mysql_auth(){
    cat > $HOME/.my.cnf <<\EOF
[client]
user=
password=
port=3306
host=127.0.0.1
EOF

}

remove_mysql_auth(){
    rm -f $HOME/.my.cnf
}

check_mysql(){
    create_mysql_auth
    mysqladmin ping &> /dev/null && return 0 || return 1
}

check_redis(){
    nc -zv 127.0.0.1 6378 &> /dev/null && return 0 || return 1
}

check_crond(){
    ps -C 'crond' &> /dev/null && return 0 || return 1
}

check_crond(){
    pgrep crond &> /dev/null && return 0 || return 1
}

restart_nginx(){
    if ps -C 'nginx' &> /dev/null; then
        echo -n "stop nginx "
        service nginx stop || pkill nginx || pkill -9 nginx || { echo "failed."; return 1; }
        echo "successed."
        sleep 3
    fi
    echo -n "start nginx "
    service nginx start && { echo "successed."; return 0; } || { echo "failed."; return 2; }
}


restart_apache(){
    if ps -C 'httpd' &> /dev/null; then
        echo -n "stop httpd "
        service httpd stop || pkill httpd || pkill -9 httpd || { echo "failed."; return 1; }
        echo "successed."
        sleep 3
    fi
    echo -n "start httpd "
    service httpd start && { echo "successed."; return 0; } || { echo "failed."; return 2; }
}

restart_redis(){
    if ps -C 'redis-server' &> /dev/null; then
        echo -n "stop redis "
        service Redis stop || pkill 'redis-server' || pkill -9 'redis-server' || { echo "failed."; return 1; } && { echo "successed."; sleep 3; }
    fi
    echo -n "start redis "
    service Redis start && { echo "successed."; return 0; } || { echo "failed."; return 2; }

}

restart_mysql(){
    if ps -C 'mysqld' &> /dev/null; then
        echo -n "stop mysql "
        service mysqld stop || pkill mysqld  || { echo "failed." ; return 1; } && { echo "successed."; sleep 3; }
    fi
    echo -n "start mysql "
    service mysqld start && { echo "successed."; return 0; } || { echo "failed."; return 2; }
}

check_local_all_sites(){
    
    urls=`grep 'server_name' /usr/local/nginx/conf/nginx.conf | grep -Ev '#|\\$|rewrite' | sed -r 's#server_name\s+([^ ]+)(;| )(.*)#http://\1/#g' | sort -u`
    let c=0
    for url in ${urls[@]}; do
         result=$(curl -m 20 --retry 3 -sk -L $url -w "%{http_code}|%{time_total}"  -o /dev/null)
         #只要存在一个站点不返回200, 则返回1
         code=${result%|*}
         total_time=${result#*|}
         if [[ $code != "200" ]]; then
            let c++
            break
         fi
    done
    return $c
}


main(){
    check_local_all_sites || { restart_apache && restart_nginx; } 
    check_redis || restart_redis
    check_mysql || restart_mysql
    remove_mysql_auth
}    

main

 

posted @ 2021-07-07 14:46  風£飛  阅读(10)  评论(0)    收藏  举报