Shell脚本批处理启动liunx中mysql+tomcat+nginx+redis服务

1.简单粗暴点将代码粘贴出来,但是在公司有的项目名该隐藏的就隐藏了,不懂可以看注释或者询问博主。

#基本这种情况,我写了个监控shell脚本的解决方案,不管以上出现那种情况,都自动恢复Nginx、mysql、tomcat、redis的服务.该脚本在生产环境上运行正常  

#!/bin/bash  
#  
# filename: startBatch.sh  
# 功能:监控 nginx、mysql tomcat、redis的服务是否正常   如果不正常就先结束掉进程然后重新启动项目  
# 运行: ./startBatch.sh & 
# 如果出现报错
# 或者前面增加 chmod +x ./startBatch.sh  #使脚本具有执行权限 
#  

# mysql 监控的IP和端口  
V_MYSQL_CGI_PORT=""
# redis 监控IP与端口
V_REDIS_CGI_PORT=""
# apache监控IP与端口
V_APACHE_CGI_PORT=""
# tomcat监控IP与端口  
V_TOMCAT_CGI_PORT=""  
# spring boot服务 监控IP与端口  
V_1_CGI_PORT=""
V_2_CGI_PORT=""

# nginx重启的脚本  
V_NGINX="/usr/local/nginx/sbin/restart.sh"  
# mysql重启的脚本
V_MYSQL=""
# apache重启的脚本
V_APACHE=""
# tomcat重启的脚本
V_TOCMAT=""
# redis重启动脚本 注意redis搭建是主从、哨兵模式
V_REDIS_SERVER_79_CONF=""
V_REDIS_SERVER_80_CONF=""
V_REDIS_SENTINEL_279_Sentinel=""
V_REDIS_SENTINEL_280_Sentinel=""
# spring boot重启的脚本 服务
V_1=""
# spring boot重启的脚本  服务  
V_2=""


# 微服务启动文件的项目名
V_1_START=""
V_2_START=""
# 日志文件   打印日志文件存放路径
V_LOG="/tmp/startBatch.log"  

# 函数定义:重启nginx  
function restart_nginx(){  
    echo "----- `date` -----" >> $V_LOG  
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep 'nginx'`" >> $V_LOG  
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep 'mysql'`" >> $V_LOG  
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep 'redis'`" >> $V_LOG  
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep 'tomcat'`" >> $V_LOG  
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep '1'`" >> $V_LOG  # 不知道是大写还是小写
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep 'java'`" >> $V_LOG  
    echo "------------------" >> $V_LOG  
    echo "`ps aux |grep '2'`" >> $V_LOG   # 不知道是大写还是小写
    echo "------------------" >> $V_LOG  
    echo "`netstat -nlpt | grep '1'`" >> $V_LOG  #查看端口是否被占用
    echo "------------------" >> $V_LOG  
    echo "`netstat -nlpt | grep '2'`" >> $V_LOG  #查看端口是否被占用
    echo "------------------" >> $V_LOG  
    $V_NGINX  >> $V_LOG #将nginx启动日志放入shell的批处理命令日志目录上 
}  

# 循环执行,不采用 crontab ,国为 crontab 最小单位是分钟,时间太长了  
while :  
do  
    # 1:先检测 nginx 主进程是否存在  
    V_NGINX_NUM=`ps axu |grep 'nginx' |grep -v 'grep' |wc -l`  
    if [ $V_NGINX_NUM -lt 1 ];then  
        restart_nginx #重新启动nginx命令 
        continue  
    fi  

    # 2:再检查mysql是否有进程存在  
    V_MYSQL_CGI_NUM=`ps axu |grep 'mysql' |grep -v 'grep' |wc -l`  
    if [ $V_MYSQL_CGI_NUM -lt 1 ];then  
                                     # 重新启动mysql命令
        service mysqld restart       # 1.使用 service 启动
        #/etc/inint.d/mysqld restart # 2.使用 mysqld 脚本启动
        continue  
    fi  

    # 3:再检查tomcat是否有进程存在  
    V_TOMCAT_CGI_NUM=`ps axu |grep 'tomcat' |grep -v 'grep' |wc -l`  
    if [ $V_TOMCAT_CGI_NUM -lt 1 ];then  
                       #cd /usr/local/tomcat/bin 进入tomcat启动目录
        ./startup.sh   #重新启动tomcat命令
        continue  
    fi  

    # 4:再检查redis是否有进程存在  
    V_REDIS_CGI_NUM=`ps axu |grep 'redis' |grep -v 'grep' |wc -l`  
    if [ $V_REDIS_CGI_NUM -lt 1 ];then  
        redis-server ./redis_1.conf #重新启动redis主从模式命令
        redis-server ./redis_2.conf #重新启动redis主从模式命令
        redis-sentinel ./sentinel_1.conf #重新启动redis哨兵模式命令
        redis-sentinel ./sentinel_2.conf #重新启动redis哨兵模式命令
        continue  
    fi  


    # 5.1再检查1是否有进程存在  
    V_1_CGI_NUM=`ps axu |grep '1' |grep -v 'grep' |wc -l`  
    if [ $V_1_CGI_NUM -lt 1 ];then 

                                  #cd 到spring boot得服务目录 通过shell命令 举例子:cd /home/jiulong/mstar/TVOS_Release_V1.0.6/jb_4.2/
        java -jar $V_1_START    #重新启动1命令  
        continue  
    fi  

    # 5.1:再判断1端口是否正常  
    for PORT in $V_1_CGI_PORT  
    do  
        V_NUM_1=`eval "netstat -nlpt | grep '${PORT}' | wc -l"`  
        if [ $V_NUM_1 -lt 1 ];then  
                                      # 如果启动报错将这行命令进行启动 先杀死进程  kill -9  $V_1_CGI_NUM
                                      #cd 到spring boot得服务目录 通过shell命令 举例子:cd /home/jiulong/mstar/TVOS_Release_V1.0.6/jb_4.2/
            java -jar $V_1_START    #重新启动1命令  
            #java -jar 1.jar        #重新启动1命令                           
            continue  
        fi  
    done  

    # 5.2:再检查2是否有进程存在  
    V_2_CGI_NUM=`ps axu |grep '2' |grep -v 'grep' |wc -l`  
    if [ $V_2_CGI_NUM -lt 1 ];then  
                            #cd 到spring boot得服务目录   通过shell命令 举例子:cd /home/jiulong/mstar/TVOS_Release_V1.0.6/jb_4.2/
                            #重新启动2主从模式命令 
        continue  
    fi  

    # 5.2:再判断2端口是否正常  
    for PORT in $V_2_CGI_PORT  
    do  
        V_NUM_2=`eval "netstat -nlpt | grep '${PORT}' | wc -l"`  
        if [ $V_NUM_2 -lt 1 ];then                 
                                                # 如果启动报错将这行命令进行启动 先杀死进程  kill -9  $V_NUM_2
                                                #cd 到spring boot得服务目录   通过shell命令 举例子:cd /home/jiulong/mstar/TVOS_Release_V1.0.6/jb_4.2/
            java -jar $V_2    #重新启动2主从模式命令 
            #java -jar 2.jar  #重新启动2命令 
            continue  
        fi  
    done  

    # 休眠  
    sleep 5  
done 

解决其它问题:https://blog.csdn.net/qq_32447301/article/details/81109575

猜你喜欢

转载自blog.csdn.net/qq_32447301/article/details/81082124