配置 Java 8 systemd 服务以在停止和重新启动时正确运行

配置 Java 8 systemd 服务以在停止和重新启动时正确运行

我正在尝试让 Java 8 守护进程/服务在我的 Raspbian Pi 上运行(使用Raspbian Stretch Lite,它在底层基于 Debian)在启动时通过systemd.我不仅希望它在启动时运行,而且如果它因某种原因崩溃,我想systemd重新启动它。

可执行 JAR 将部署到/home/myuser/,并且由于有一个库 (pi4j)它用于与 Raspberry Pi 的 GPIO 引脚进行通信,java命令必须与 一起跑sudo。因此,我可以通过发出以下命令来手动运行 JAR:

sudo java -jar /home/myuser/myapp.jar

而且它运行得很漂亮,没有任何问题。这是我对/lib/systemd/system/myapp.service服务文件的最佳尝试:

[Unit]
Description=MyApp Service
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=sudo java -jar /home/myuser/myapp.jar

[Install]
WantedBy=multi-user.target

我会确保myapp.jar使用类似的东西Apache Commons 守护程序库智能响应各种linux SIG命令。但:

  • systemd如果我可以在上面添加配置,这将允许我使用类似的东西手动启动服务systemctl start myapp,使用关闭它systemctl stop myapp并使用重新启动它,那就太好了systemctl restart myapp
  • 我需要在启动时myapp.jar运行 (with sudo) 以及在崩溃时重新启动(不知道如何完成后者,而且我并不完全肯定我是否正确配置了前者......);我希望这个配置与我手动发出的效果相同systemctl start myapp
  • 我计划使用手动命令关闭 Raspberry Pi sudo halt -p,并且我需要它具有与手动运行相同的效果systemctl stop myapp

关于我可以添加到我的myapp.service文件中以实现此目的的任何想法吗?

相关内容