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 @   風£飛  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示