如何在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