Linux:服务自启动(含docker容器内应用服务自启动)

    技术2023-09-15  182

    文章目录

    简介一、自定义开机程序二、配置为系统服务1、chkconfig 配置2、systemctl 添加1) 、新建立tomcat.service文件2)、startup.sh文件添加Java环境变量3) 、tomcat.service文件参数说明4) 、常用命令 三、启动容器时利用脚本启动服务(==仅适用于启动容器内服务==)1、环境2、问题3、进入容器创建一个脚本 (或者在宿主机创建好复制进容器)4、修改文件权限5、制作镜像6、新建容器7、测试

    简介

    之前利用docker 部署了一个ssm项目,当时没有配置tomcat随容器启动而启动,导致启动容器后,还需要进入容器开启tomcat服务才可以,mysql 当时利用 systemctl enable mysqld开机启动服务,不用在手动启动了,下面介绍tomcat服务开机自启动,有以下三种

    一、自定义开机程序

    类似于window系统的默认启动程序,开机会自启动 打开 /etc/rc.d/rc.local 文件,添加如下信息,因为shell不能读取系统的环境变量,所以需要添加Java环境变量,当然你也可以使用其他方法添加环境变量,注意将路径修改为你的 tomcat 安装路径

    export JAVA_HOME=/usr/local/jdk1.8.0_161 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jsr export PATH=$JAVA_HOME/bin:$PATH /usr/local/apache-tomcat-8.5.55/bin/startup.sh start

    二、配置为系统服务

    1、chkconfig 配置

    新建服务脚本

    vi /etc/init.d/tomcat

    脚本内容如下(环境变量你可以试着先不加,如果报错需要环境变量再加)

    #!/bin/bash # description: Tomcat8 Start Stop Restart # processname: tomcat8.5.55 # chkconfig: 234 20 80 export JAVA_HOME=/usr/local/jdk1.8.0_161 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jsr export PATH=$JAVA_HOME/bin:$PATH CATALINA_HOME=/usr/local/apache-tomcat-8.5.55 case $1 in start) sh $CATALINA_HOME/bin/startup.sh ;; stop) sh $CATALINA_HOME/bin/shutdown.sh ;; restart) sh $CATALINA_HOME/bin/shutdown.sh sh $CATALINA_HOME/bin/startup.sh ;; *) echo 'please use : tomcat {start | stop | restart}' ;; esac exit 0

    常用命令

    向chkconfig添加 tomcat 服务 chkconfig --add tomcat 开启tomcat服务自启动 chkconfig tomcat on 启动/停止/重启 service tomcat start/stop/restart 关闭tomcat服务自启动: chkconfig tomcat off 删除chkconfig的tomcat服务 chkconfig –del tomcat

    想了解更多的 chkconfig 命令参考下面连接 链接: https://www.cnblogs.com/ftl1012/p/chkconfig.html.

    2、systemctl 添加
    1) 、新建立tomcat.service文件

    在/usr/lib/systemd/system/目录下新建立tomcat.service文件

    vi /usr/lib/systemd/system/tomcat.service

    添加如下信息()

    [Unit] Description=java tomcat After=tomcat service [Service] Type=forking ExecStart=/usr/local/apache-tomcat-8.5.55/bin/startup.sh ExecReload=/usr/local/apache-tomcat-8.5.55/bin/restart.sh ExecStop=/usr/local/apache-tomcat-8.5.55/bin/shutdown.sh [Install] WantedBy=multi-user.target
    2)、startup.sh文件添加Java环境变量

    tomcat.service文件依然不能使用系统配置的环境变量,所以仍然需要配置环境变量,问题如下

    java -version systemctl daemon-reload systemctl enable tomcat systemctl start tomcat systemctl status tomcat.service

    命令详解参考下面的 3) 、基本使用 如果大家遇到这种情况,可以参考我的另一篇博客 链接: https://blog.csdn.net/qq_41538097/article/details/107110230. 添加环境变量 tomcat.service 服务主要启动 就是执行 startup.sh 脚本,最后将环境变量直接加入 startup.sh脚本中

    vi /usr/local/apache-tomcat-8.5.55/bin/startup.sh

    如图服务可以正常启动 以下连接方法你们可以试试,不过我都没解决 链接: https://www.cnblogs.com/zhangdewang/p/8617743.html.

    链接: https://blog.csdn.net/DRB321/article/details/93242793.

    3) 、tomcat.service文件参数说明
    [Unit]:服务的说明 Description:描述服务 After:依赖,当依赖的服务启动之后再启动自定义的服务 [Service]服务运行参数的设置 Type=forking是后台运行的形式 ExecStart为服务的具体运行命令 ExecReload为重启命令 ExecStop为停止命令 PrivateTmp=True表示给服务分配独立的临时空间 注意:启动、重启、停止命令全部要求使用绝对路径 [Install]服务安装的相关设置,可设置为多用户

    更多配置参数参考如下连接 链接: https://blog.csdn.net/qq_41453285/article/details/88600304.

    4) 、常用命令
    1) 重载系统服务 systemctl daemon-reload 2) 开机启动tomcat服务(后面的service可加可不加,后面的命令类似) systemctl enable tomcat 或 systemctl enable tomcat.service 3) 去掉开机启动tomcat服务(后面的service可加可不加) systemctl disable tomcat.service 4) 启动tomcat服务(后面的service可加可不加) systemctl start tomcat 5) 停止tomcat服务(后面的service可加可不加) systemctl stop tomcat.service 6) 重新启动tomcat服务(后面的service可加可不加) systemctl restart tomcat 7) 查看tomcat服务状态(后面的service可加可不加) systemctl status tomcat.service

    更多 systemctl 相关命令请查看下方连接 链接: https://www.cnblogs.com/zwcry/p/9602756.html.

    三、启动容器时利用脚本启动服务(仅适用于启动容器内服务)

    1、环境

    系统: Linux centos8 镜像image:centos8.0 mysql:8.0.20 jdk:jdk1.8.0_161 tomcat:apache-tomcat-8.5.55

    2、问题

    在容器内部想要使用systemctl 在创建启动容器时需要添加–privileged /usr/sbin/init 才可以使用 如下

    docker run -itd --name ssm2 -p 4000:8080 -p 3306:3306 --privileged yelingyun/centos_ye:1.0.0 /usr/sbin/in

    如果想创建容器时使用其他脚本启动容器内服务,(我打开 /usr/sbin/init文件看了,一脸懵逼)显然两者不可兼得,下面简单讲一下不考虑使用systemctl命令的情况下,启动容器时顺带利用脚本启动容器

    3、进入容器创建一个脚本 (或者在宿主机创建好复制进容器)
    vi /usr/local/apache-tomcat-8.5.55/bin/tomcatshell.sh

    添加如下信息

    #!/bin/bash /usr/local/apache-tomcat-8.5.55/bin/start.sh start /usr/sbin/init /bin/bash
    4、修改文件权限
    chmod 777 tomcatshell.sh
    5、制作镜像

    将当前容器制作为镜像,在利用镜像重启创建启动容器

    docker commit 容器名 镜像名 如 docker commit ssms tomcat_test
    6、新建容器

    现在就可以利用新镜像创建容器的时候执行脚本启动tomcat

    docker run -itd --name ssm3 -p 4000:8080 -p 3306:3306 --privileged tomcat_test /usr/local/apache-tomcat-8.5.55/bin/tomcatshell.sh
    7、测试

    如下,tomcat 服务启动成功,可以正常访问项目

    Processed: 0.009, SQL: 9