服务器宕机后还在手动重启服务?十分钟教你编写自启动脚本

服务器宕机后还在手动重启服务?十分钟教你编写自启动脚本

Posted by LY on May 6, 2020

欢迎大家关注我的以下主页,尤其是今日头条!!!谢谢🙏🙏🙏

csdn:雷园的csdn博客

个人博客:雷园的个人博客

简书:雷园的简书

今日头条:来自底层程序员的仰望

服务器宕机后还在手动重启服务?十分钟教你编写自启动脚本

开头说几句

  1. 最近的疫情仍然是很严重,在这样的情况之下,希望各位小伙伴可以遵循政府的号召在家中进行自我隔离
  2. 同样的祝愿大家平安度过这次考验
  3. 今天我们做一个简单的脚本实现Centos中各种服务的自动启动。
  4. 希望大家在这里可以学到一点点用得到的知识,同样也非常高兴大家能跟我交流沟通。
为什么我们需要自启动?
  1. 无论是云端服务器还是本地的服务器,一定难免出现宕机的情况。
  2. 那么在出现这种情况的时候我们未必能第一时间处理问题。
  3. 在系统宕机重启后,自启动脚本能够在第一时间里启动我们的服务,尽可能的减少因不能及时处理造成的损失。
是否所有的应用都需要通过脚本实现自启动?
  1. 并非所有的应用都需要通过脚本实现,大多数的服务化应用都已经支持开机启动,我们只需要对系统服务进行设定即可。
  2. 需要我们手动实现自启动的服务,多为源码编译(如Redis)或解压可直接运行的软件(如Tomcat、Zookeeper等)。

正式开始

环境设定
  1. 在开始脚本编写之前,我们首先对环境进行设定,即描述我们服务器中包含哪些需要设定自启动的软件。
  2. 这里我们设定服务器中包含软件:Mysql,Zookeeper,Redis,FastDfs,Nginx,Tomcat,Mongo,EmqX,Ntpd
  3. 对于上述软件,我们简单的介绍一下:
    1. Mysql:关系型数据库,我们使用rpm的方式进行安装
    2. Zookeeper:分布式服务框架,无需安装解压即用
    3. Redis:缓存数据库,源码编译方式进行安装
    4. FastDfs:文件服务器,源码编译方式进行安装
    5. Nginx:HTTP和反向代理服务器,源码编译方式进行安装
    6. Tomcat:WEB应用服务器,无需安装解压即用
    7. Mongo:基于分布式文件存储的数据库,无需安装解压即用
    8. EmqX:高可用性消息队列,我们使用rpm安装方式
    9. Ntpd:时间服务器,使用yum进行安装
配置文件设计
  1. 安装状态:即服务器中是否安装某个应用,若没有安装则不执行启动命令避免报错

  2. 安装路径:一般来说我们应用安装目录并不固定,所以需要对安装路径进行配置

  3. 配置文件路径:有些应用启动需要依赖于配置文件,这里需要对应用使用的配置文件路径进行配置

  4. Java安装路径:zookeeper以及tomcat的启动会依赖于Java环境,我们需要在脚本中指定Java环境否则会导致启动失败

  5. 根据上述的环境设定,我们编写配置文件autoStart.conf内容如下

    # AutoStartConfig
    # 0:true 1:false
    ## java config
    JAVA_INSTALL_PATH=/usr/local/java/jdk1.8.0_151
    ## redis config
    IS_INSTALL_REDIS=0
    REDIS_PATH=/app/software/redis
    REDIS_CONFIG_PATH=/etc/redis/6379/redis.conf
    ## emqx config
    IS_INSTALL_EMQX=0
    ## zookeeper config
    IS_INSTALL_ZOO=0
    ZOO_PATH=/app/software/zookeeper-3.4.9
    ## mysql config
    IS_INSTALL_MYSQL=0
    ## file fdfs config
    IS_INSTALL_FDFS=0
    FDFS_CONFIG_PATH=/etc/fdfs/
    NGINX_PATH=/opt/nginx/
    ## mongodb config
    IS_INSTALL_MONGO=0
    MONGO_PATH=/app/software/mongo
    MONGO_CONFIG_PATH=/etc/mongo/mongo.conf
    ## tomcat config
    IS_INSTALL_TOMCAT=0
    TOMCAT_PATH=/app/software/tomcat
    ## ntp config
    IS_INSTALL_NTP=0
    
脚本编写
  1. 呐~我们准备工作基本都做完了,接下来我们就开始脚本了。

  2. 根据上面我们设定的配置文件,我们的脚本需要首先判断是否安装了该软件。

  3. 然后根据配置文件中的安装目录以及应用配置文件对应用进行启动。

  4. 值得注意的是,有些应用会有相应的依赖关系,就像上面说到的zookeeper、tomcat对Java环境的依赖。

  5. 再有就是我们的启动可能会有一定的顺序,简单来说,我们开发的应用一般都部署在tomcat中,如果我们开发的应用需要依赖到zookeeper、redis等等这些服务的时候,就需要优先启动依赖服务。

  6. 所以我们所行将tomcat放在最后进行启动。

  7. 最后的脚本大概就是这个样子:

    #!/bin/bash
    #chkconfig:  2345 81 96
    #description: market
    ## author:来自底层程序员的仰望
    . /etc/autoStart/autoStart.conf
    export JAVA_HOME=${JAVA_INSTALL_PATH}
    export PATH=.:$JAVA_HOME/bin:$PATH
    export PATH=.:/usr/local/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    function startTomcat() {
        ${TOMCAT_PATH}/bin/startup.sh
    }
    function startZoo() {
        ${ZOO_PATH}/bin/zkServer.sh start
    }
    function startRedis() {
        ${REDIS_PATH}/src/redis-server ${REDIS_CONFIG_PATH}
    }
    function startEmqx() {
        systemctl start emqx
    }
    function startMysql() {
        systemctl start mysqld
    }
    function startFdfsAndNginx() {
        fdfs_trackerd ${FDFS_CONFIG_PATH}/tracker.conf
        fdfs_storaged ${FDFS_CONFIG_PATH}/storage.conf
        ${NGINX_PATH}/sbin/nginx
    }
    function startNtp() {
        systemctl start ntpd
    }
    function startMongo() {
        ${MONGO_PATH}/bin/mongod -f ${MONGO_CONFIG_PATH}
    }
    function main() {
        if [[ ${IS_INSTALL_REDIS} -eq 0 ]]; then
            startRedis
        fi
        if [[ ${IS_INSTALL_EMQX} -eq 0 ]]; then
            startEmqx
        fi
        if [[ ${IS_INSTALL_ZOO} -eq 0 ]]; then
            startZoo
        fi
        if [[ ${IS_INSTALL_MYSQL} -eq 0 ]]; then
            startMysql
        fi
        if [[ ${IS_INSTALL_FDFS} -eq 0 ]]; then
            startFdfsAndNginx
        fi
        if [[ ${IS_INSTALL_MONGO} -eq 0 ]]; then
            startMongo
        fi
        if [[ ${IS_INSTALL_TOMCAT} -eq 0 ]]; then
            startTomcat
        fi
        if [[ ${IS_INSTALL_NTP} -eq 0 ]]; then
            startNtp
        fi
    }
    main
    
将脚本添加至开机启动
  1. 首先创建文件夹mkdir -p /etc/autoStart/用于存放我们的配置文件

  2. 移动启动脚本mv autoStart.sh /etc/rc.d/init.d/

  3. 赋予脚本运行权限chmod +x /etc/rc.d/init.d/autoStart.sh

  4. 添加开机启动chkconfig --add autoStart.sh && chkconfig autoStart.sh on

  5. 在上一步中需要注意的一点,那就是脚本的开头必须要包含该描述:

    #!/bin/bash
    #chkconfig:  2345 81 96
    #description: market
    
在调试过程中遇到的困难
  1. 在最初编写时,我并没有在脚本中添加Java环境,导致zookeeper以及tomcat均无法启动。

  2. 所以我在脚本中加入了java环境的配置:

    export JAVA_HOME=${JAVA_INSTALL_PATH}
    export PATH=.:$JAVA_HOME/bin:$PATH
    export PATH=.:/usr/local/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    

最后说几句

  1. 这样就可以啦,如果你有安装其他的软件,就需要各位手动去修改一下代码了。
  2. 希望该篇能够给大家一点点小的帮助,非常希望大家能与我交流沟通。
  3. 如果大家有更好的方式方法可以贴出来哦!!!