在 Linux 上使用 Systemd 运行 Java Jar 应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 Linux 上使用 Systemd 运行 Java Jar 应用程序相关的知识,希望对你有一定的参考价值。


文章目录

  • ​​步骤 1:创建应用程序用户和组​​
  • ​​步骤 2:创建系统服务​​
  • ​​步骤 3:使用 systemd 启动 Java 应用程序服务​​
  • ​​ydic 延大示例样本​​


参考:

  1. ​https://computingforgeeks.com/how-to-run-java-jar-application-with-systemd-on-linux/​
  2. ydic

启动位于 ​​/home/chenrise/ccue​​​ 目录下的 ​​Jar​

步骤 1:创建应用程序用户和组

首先为用户创建一个系统组。

groupadd -r appmgr

接下来,我们​​jvmapps​​ 使用默认组创建一个系统用户:

useradd -r -s /bin/false -g appmgr jvmapps

步骤 2:创建系统服务

我们现在可以创建一个 ​​systemd ​​​ 服务文件来管理我们的应用程序。您需要以 ​​root ​​用户身份创建此文件

vim /etc/systemd/system/ccue.service

它将具有如下内容:

[Unit]
Description=Manage Java service

[Service]
WorkingDirectory=/home/chenrise/ccue
ExecStart=/usr/java/jdk-14.0.2/bin/java -Dloader.path=./lib -jar ccue-server.jar --spring.profiles.active=stage
User=jvmapps
Type=simple
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

设置​​User​​​为之前创建的那个,并设置​​WorkingDirectory​​​为带有 ​​jar ​​文件的目录。

完成更改后,为项目目录授予用户和组所有权权限:

chown -R jvmapps:appmgr /home/chenrise/ccue

步骤 3:使用 systemd 启动 Java 应用程序服务

接下来要做的是启动应用程序服务,但首先,重新加载 systemd 以便它知道添加的新应用程序。

systemctl daemon-reload

重新加载后,启动服务:

systemctl start ccue

要检查状态,请使用:

systemctl status ccue

样本输出:

[root@node-130 ccue]# systemctl status ccue
● ccue.service - Manage Java service
Loaded: loaded (/etc/systemd/system/ccue.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2022-11-02 15:59:54 CST; 22min ago
Main PID: 8873 (java)
Tasks: 236
Memory: 763.9M
CGroup: /system.slice/ccue.service
└─8873 /usr/java/jdk-14.0.2/bin/java -Dloader.path=./lib -jar ccue-server.jar --spring.profiles.active=stage

11月 02 16:22:00 node-130 java[8873]: 16:22:00.031 INFO 8873 [eduler_Worker-7] c.c.boot.visitors.task.VisitorTask : 修改访客状态定时任务结束-------------
11月 02 16:22:00 node-130 java[8873]: 16:22:00.058 INFO 8873 [eduler_Worker-8] c.c.boot.ccudata.task.CcuDataTask : 同步长大临时访客数据定时任务开始-------------
11月 02 16:22:00 node-130 java[8873]: 16:22:00.058 INFO 8873 [eduler_Worker-8] c.c.b.f.d.DynamicDataSourceContextHolder : 切换到SLAVE数据源
11月 02 16:22:00 node-130 java[8873]: false
11月 02 16:22:00 node-130 java[8873]: 16:22:00.064 INFO 8873 [eduler_Worker-8] c.c.boot.ccudata.task.CcuDataTask : 无效的身份证号:222313199410144241
11月 02 16:22:00 node-130 java[8873]: true
11月 02 16:22:00 node-130 java[8873]: 16:22:00.064 INFO 8873 [eduler_Worker-8] c.c.boot.ccudata.task.CcuDataTask : 结束时间大于当前时间:跳过当前数据
11月 02 16:22:00 node-130 java[8873]: false
11月 02 16:22:00 node-130 java[8873]: 16:22:00.072 INFO 8873 [eduler_Worker-8] c.c.boot.ccudata.task.CcuDataTask : 同步长大临时访客数据定时任务结束-------------
11月 02 16:22:00 node-130 java[8873]: 16:22:00.089 INFO 8873 [schedule-pool-6] c.chenrise.boot.ticket.task.TicketTask : 判断人员通行证失效时间定时任务结束-------------

您还可以使服务在服务器启动时启动:

systemctl enable ccue

样本输出:

[root@node-130 ccue]# systemctl enable ccue
Created symlink from /etc/systemd/system/multi-user.target.wants/ccue.service to /etc/systemd/system/ccue.service.

要重新启动应用程序,请使用:

systemctl restart ccue

查看日志

journalctl -u ccue -f

ydic 延大示例样本

​ydic.service​

[Unit]
Description=ydic
Requires=docker.service
After=docker.service

[Service]
User=root
ExecStart=/data/ydic.sh
SuccessExitStatus=143
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

​ydic.sh​

#!/bin/bash
export JAVA_HOME=/data/jdk-14.0.2+12
export PATH=$PATH:$JAVA_HOME/bin
java -Djava.security.egd=file:/test/./urandom -Dspring.profiles.active=prod -jar /data/ydic-server.jar


以上是关于在 Linux 上使用 Systemd 运行 Java Jar 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在Debian上使用systemd管理系统

如何在 systemd 下管理linux系统的时间和日期

Linux systemd 自启动脚本无法正常运行(求助分析方向)

[转帖]在 Linux 上使用 systemd 设置定时器

在 systemd 上使用 daphne 运行 django 频道

Centos8种如何更改运行级别