Linux 为tomcat 添加服务到systemctl

准备工作

查看tomcat安装位置,即文件夹位置

sudo find / -name *tomcat*
从输出结果中找到tomcat所在位置。假设是/opt/tomcat/

查看JAVA_HOME

echo $JAVA_HOME
这是查看当前系统配置的环境变量JAVA_HOME。假设是/usr/lib/jvm/openJDK8/

添加setenv.sh文件

到tomcat安装目录下的bin目录中添加setenv.sh文件,即/opt/tomcat/bin/setenv.sh
文件中添加内容:CATALINA_PID="$CATALINA_BASE/tomcat.pid"tomcat.pid的名字可以自定义,这个无所谓,比如curtomcat.pid,应该只要是扩展名为pid就行。

添加服务

/lib/systemd/system/中添加文件tomcat8.service,同样,文件名可以自定义,这个是到时候启动服务的时候的服务名。
/lib/systemd/system/tomcat8.service的内容为:

[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/openJDK8/"
PIDFile=/opt/tomcat/tomcat.pid
ExecStart=/opt/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
# usually, tomcat service will be killed with exit_code 143.
SuccessExitStatus=143
PrivateTmp=true
#User=root
#Group=root

[Install]
WantedBy=multi-user.target

其中的JAVA_HOME应该是可以随便指定自已想用的jdk;tomcat.pid是刚刚设置那个pid文件名。
执行systemctl daemon-reload ,来刷新服务。

接下来就可以用systemctl start tomcat8 来启动服务了。

问题

stop service faild

● tomcat8.service - Apache Tomcat 8
   Loaded: loaded (/usr/lib/systemd/system/tomcat8.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2021-05-21 13:46:07 +08; 9s ago
  Process: 8937 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
  Process: 8804 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 8815 (code=exited, status=143)

因为退出的code 是143 而不是0,所以状态是failed。在tomcat8.service中添加的SuccessExitStatus=143就是让结束时,认为143时正常的。

==== AUTHENTICATING FOR org.freedesktop.systemd1.manager-unit ====

每次使用systemctl启动或者停止服务时,都要授权,麻烦。
修改/usr/share/polkit-1/actions/org.freedesktop.systemd1.policy.(我不确定其中1是小写的L还是数字1。用tab补全吧)
把其中id="org.freedesktop.systemd1.manage-units"改为如下

        <action id="org.freedesktop.systemd1.manage-units">
                <description gettext-domain="systemd">Manage system services or other units</description>
                <message gettext-domain="systemd">Authentication is required to manage system services or other units.</message>
                <defaults>
                        <allow_any>yes</allow_any>
                        <allow_inactive>auth_admin</allow_inactive>
                        <allow_active>auth_admin_keep</allow_active>
                </defaults>
        </action>

allow_any 的值为yes。

参考

1.linux下tomcat加入到系统服务systemctl
2. Linux tomcat加入Systemctl服务,开机自启动
3. Services remain in failed state after stopped with systemctl
4. Authentication is required to manage system services or units.
5. polkit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值