• CentOS7设置tomcat开机自启动


    原文地址:https://www.jianshu.com/p/f0f8458e1631

    安装jdk

    参考《在CentOS7上安装Hadoop和Hive》《Docker安装tomcat服务》,安装jdk和tomcat。

    1、下载jdk8u161
    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz

    2、解压到jvm目录
    mkdir -p /usr/lib/jvm

    tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/lib/jvm/

    3、配置JAVA_HOME和JRE_HOME,vi /etc/profile,在最后添加:

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

    然后使配置文件生效,source /etc/profile。

    4、测试jdk是否配置成功。
    javajavac

    安装tomcat

    1、下载tomcat8.0.50
    wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.0.50/bin/apache-tomcat-8.0.50.tar.gz

    2、解压tomcat到/opt目录
    tar -xzvf apache-tomcat-8.0.50.tar.gz -C /opt

    3、启动tomcat
    cd /opt/apache-tomcat-8.0.50/bin/

    ./startup.sh

    4、测试访问
    curl localhost:8080
    至此,遇到一个大坑。curl命令卡在那里不动了,浏览器访问也是一直转圈,转啊转,十几分钟了还在转。。。莫非,tomcat版本有问题?换了8.5.29,不行;换了7.0.85,不行。莫非是jdk版本有问题?毕竟第一次是使用yum命令安装的。换了1.8.0_161,依然不行。

    好在,最终找到了答案:Centos7+Tomcat8配置javaweb环境,tomcat启动巨慢的问题,安装rng服务。

    (1)安装熵服务
    yum install rng-tools
    (2)启动熵服务
    systemctl start rngd
    然后,tomcat就启动成功了。
    (3)赶紧把rng服务放进开机自启动
    systemctl enable rngd

    5、关闭tomcat。
    ./shutdown.sh

    设置开机自启动

    参考《在CentOS7中设置Tomcat开机自启动》,设置步骤如下:

    假设tomcat目录为/opt/apache-tomcat-8.0.50

    1、为Tomcat添加启动参数

    catalina.sh在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此在/opt/tomcat/bin路径下创建setenv.sh文件,内容如下:

    # 设置JAVA_HOME
    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    export CATALINA_HOME=/opt/apache-tomcat-8.0.50
    export CATALINA_BASE=/opt/apache-tomcat-8.0.50
    # 设置Tomcat的PID文件
    CATALINA_PID="$CATALINA_BASE/tomcat.pid"
    # 添加JVM选项
    JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"

    2、在/usr/lib/systemd/system路径下添加tomcat.service文件,内容如下:

    [Unit]
    Description=tomcat
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/opt/apache-tomcat-8.0.50/tomcat.pid
    ExecStart=/opt/apache-tomcat-8.0.50/bin/startup.sh
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target

    3、把tomcat加入开机自启动
    systemctl enable tomcat.service

    4、重启服务器
    reboot

    5、再次连接后,查看服务状态
    systemctl status tomcat.service

    看到tomcat已经启动,正想着大功告成,却发现浏览器访问又开始转圈了。检查rng服务,启动正常。
    直接使用./startup.sh启动正常,而使用systemctl start tomcat就转圈,还能是什么原因?
    参照《CentOS7下Tomcat启动慢的原因及解决方案》一文,修改java.security,无效;修改catalina.sh,无效。
    是不是tomcat.service写的有问题,参照其他配置方案修改,依然无效。
    想到《Dockerfile使用Supervisor管理Tomcat》一文中,supervisor启动tomcat也会有些问题。那么,修改startup.sh呢?依然无效。

    万万没想到,最后一步还有这么个深坑,沉思良久,莫非,要换init.d方法来设置启动?目前看来,只能这样了。

    删除开机自启动

    1、删除tomcat.service
    find / -name "tomcat*"
    rm /usr/lib/systemd/system/tomcat.service
    rm /etc/systemd/system/multi-user.target.wants/tomcat.service
    rm /etc/selinux/targeted/active/modules/100/tomcat

    2、测试启动
    systemctl daemon-reload
    systemctl start tomcat.service
    出现提示Failed to start tomcat.service: Unit not found.说明删除成功。

    设置开机自启动之init.d

    1、在/etc/init.d下创建服务脚本
    vim /etc/init.d/tomcat
    写入内容如下:

    #!/bin/bash
    #
    # tomcat startup script for the Tomcat server
    #
    #
    # chkconfig: 345 80 20
    # description: start the tomcat deamon
    #
    # Source function library
    . /etc/rc.d/init.d/functions
    
    prog=tomcat
    # 根据自己的路径改写JAVA_HOME
    JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161/  
    export JAVA_HOME
    # 根据自己的路径改写CATALANA_HOME
    CATALANA_HOME=/opt/apache-tomcat-8.0.50/   
    export CATALINA_HOME
    
    case "$1" in
    start)
        echo "Starting Tomcat..."
        $CATALANA_HOME/bin/startup.sh
        ;;
    
    stop)
        echo "Stopping Tomcat..."
        $CATALANA_HOME/bin/shutdown.sh
        ;;
    
    restart)
        echo "Stopping Tomcat..."
        $CATALANA_HOME/bin/shutdown.sh
        sleep 2
        echo
        echo "Starting Tomcat..."
        $CATALANA_HOME/bin/startup.sh
        ;;
    
    *)
        echo "Usage: $prog {start|stop|restart}"
        ;;
    esac
    exit 0

    2、更改权限
    chmod a+x /etc/init.d/tomcat

    3、测试启动
    service tomcat start
    启动成功,然而,还是转圈。。。

    实际上,init.d方法添加的自启动服务,也会加入到systemctl的管理。因为,这时也可以用systemctl start tomcat来启动服务。

    无奈,决定换成supervisor来设置自启动。

    设置开机自启动之supervisor

    开始设置前最好先删除init.d方法设置的自启动文件,虽然不影响使用,但是看着闹心。

    1、安装supervisor
    yum install supervisor

    2、创建sock
    touch /tmp/supervisor.sock

    chmod 777 /tmp/supervisor.sock

    3、开机启动
    systemctl enable supervisord

    4、生成配置文件

    mkdir -p /etc/supervisor/
    echo_supervisord_conf > /etc/supervisord.conf

    5、修改配置文件,vim /etc/supervisord.conf,添加:

    [include]
    files = /etc/supervisor/*.conf

    6、运行
    systemctl start supervisord

    7、在/etc/supervisor中新建tomcat.conf文件

    [program:tomcat]
    directory=/opt/apache-tomcat-8.0.50
    command=/opt/apache-tomcat-8.0.50/bin/catalina.sh run
    environment=JAVA_HOME="/usr/lib/jvm/jdk1.8.0_161",JAVA_BIN="/usr/lib/jvm/jdk1.8.0_161/bin"
    user=root
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/supervisor/%(program_name)s.log
    stderr_logfile=/var/log/supervisor/%(program_name)s.log

    8、重启supervisor
    systemctl retart supervisord

    PS:重启tomcat命令
    supervisorctl -c /etc/supervisord.conf restart tomcat

    9、测试访问
    curl localhost:8080,成功。浏览器访问,成功。
    换了三种自启动方式,总算成功了,不容易。。。

    10、重启测试
    reboot

    11、二次测试
    重启后执行supervisorctl status,tomcat正常运行。
    curl命令和浏览器测试,正常。至此,tomcat自启动配置成功。其实,systemd和init.d两种方法,理论上也是可以成功的,访问转圈的锅肯定是机器和系统的。嗯,就是这样。












  • 相关阅读:
    C# 运用StreamReader类和StreamWriter类实现文件的读写操作
    C# 理解FileInfo类的Open()方法
    C# 运用FileInfo类创建、删除文件
    C# 创建子目录
    C# 目录下的文件操作
    C# 运用DirectoryInfo类和FileInfo类
    C# 文件操作概述
    LINUX介绍
    linux iso 下载地址
    ADO.NET梳理
  • 原文地址:https://www.cnblogs.com/dyh004/p/13051290.html
Copyright © 2020-2023  润新知