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

时间:2020-02-23 14:30:58  来源:igfitidea点击:

在本文中,将介绍如何使用Systemd服务轻松管理Java jar应用程序。 Systemd是Linux的系统和服务管理器。现在,它是许多发行版的默认初始化系统,包括Ubuntu 20.04/18.04,Debian 10/9,CentOS 8/7,Arch Linux 等

在此部署中,我在/opt/prod /目录下有一个Jar文件。根据经验,我们需要添加一个系统用户,该用户将使用systemd运行该应用程序。

创建一个应用程序用户和组

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

sudo groupadd -r appmgr

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

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

确认用户创建的用户以及是否具有正确的组:

$id jvmapps
uid=992(jvmapps) gid=986(appmgr) groups=986(appmgr)

创建系统服务

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

sudo vim /etc/systemd/system/myapp.service

它将具有如下内容:

[Unit]
Description=Manage Java service

[Service]
WorkingDirectory=/opt/prod
ExecStart=/bin/java -Xms128m -Xmx256m -jar myapp.jar
User=jvmapps
Type=simple
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

将"用户"设置为先前创建的用户,将" WorkingDirectory"设置为包含jar文件的目录。

-Xms128m和-Xmx256m用于设置应用程序可以使用的最小和最大内存。

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

sudo chown -R jvmapps:appmgr /opt/prod

使用systemd启动Java应用程序服务

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

sudo systemctl daemon-reload

重新加载后,启动服务:

sudo systemctl start myapp.service

要检查状态,请使用:

$systemctl status myapp

输出示例:

$systemctl status myapp
● myapp.service - Manage Java service
   Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2016-08-24 11:12:23 EAT; 23h ago
 Main PID: 23220 (java)
   CGroup: /system.slice/myapp.service
           └─23220 /bin/java -Xms128m -Xmx256m -jar myapp.jar

Aug 25 10:50:00 server1 java[23220]: # Duration: 1000 µs
Aug 25 10:50:00 server1 java[23220]: # Total number of fields classified 0, 0 failed
Aug 25 10:50:00 server1 java[23220]: # --------------------------------------------------------------
Aug 25 10:50:00 server1 java[23220]: # Completed step 'classify-tables'
Aug 25 10:50:00 server1 java[23220]: # Start: 2016-08-25T07:50:00.258Z
Aug 25 10:50:00 server1 java[23220]: # End: 2016-08-25T07:50:00.259Z
Aug 25 10:50:00 server1 java[23220]: # Duration: 1000 µs
Aug 25 10:50:00 server1 java[23220]: # Total number of tables classified 3, 0 updated
Aug 25 10:50:00 server1 java[23220]: #################################################################
Aug 25 10:50:00 server1 java[23220]: 08-25 10:50:00 INFO sync.util :: FINISHED: Analyze data for mysql Database 2 'Ch... (8 ms)
Hint: Some lines were ellipsized, use -l to show in full.

我们还可以启用该服务以在服务器启动时启动:

$sudo systemctl enable myapp
Created symlink from /etc/systemd/system/multi-user.target.wants/myapp.service to /etc/systemd/system/myapp.service.

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

sudo systemctl restart myapp