使用systemd运行java jar应用程序

在 Linux 服务器上使用 systemd 管理 java/tomcat 应用服务
以前,打包 java web 项目都是用的 war 包,运行在 tomcat 等应用服务器上。但是有个别项目需要发布为 *.jar 包格式。想着部署后使用 systemd 来进行管理。

创建用户与组

首先创建一个单独的应用账号来运行我们的 java jar程序

  1. 创建系统组

    shell
    1
    groupadd -r java
  2. 使用默认组来创建系统用户

    shell
    1
    useradd -r -s /bin/false -g java tomcat
  3. 确认用户与组是否正确创建使用

    shell
    1
    id blockchain

    返回值

    1
    uid=996(tomcat) gid=994(java) groups=994(java)

编写service文件

现在我们来创建一个 systemd 服务文件来管理我们的应用程序

shell
1
vim /usr/lib/systemd/system/java-server.service

内容如下:

/usr/lib/systemd/system/java-sample.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=java sample
After=network.target

[Service]
Type=simple
User=tomcat
WorkingDirectory=/data/sample/
Restart=on-failure
RestartSec=5s
ExecStart=/usr/share/jdk/jre/bin/java -jar sample-java.jar --spring.config.location=application.yml

[Install]
WantedBy=multi-user.target

保存退出后,修改 sample-java.jar 所在的文件目录的所有者为用户 tomcat,确保有足够权限运行程序。

1
chown -R tomcat:java /data/sample/

重载 systemd 配置

1
systemctl daemon-reload

完成上述步骤后即可使用systemd来启动程序了

1
2
3
systemctl start java-sample  # 启动

systemctl enable java-sample # 开机启动

附:tomcat systemd 脚本

/usr/lib/systemd/system/tomcat-sample.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[Unit]
# 描述
Description=Apache Tomcat 8
After=syslog.target network.target

[Service]
Type=forking
# 用户
User=tomcat
Group=java
# 工作路径
WorkingDirectory=/data/sso-rst/
# tomcat pid
# $tomcat_home/bin/setenv.sh中添加 CATALINA_PID="$CATALINA_BASE/tomcat.pid"
PIDFile=/data/sso-rst/tomcat.pid
# 启动当前服务的命令
ExecStart=/data/sso-rst/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
# 设置是否使用私有的tmp目录
PrivateTmp=true

[Install]
WantedBy=multi-user.target

参考文章:

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...