我正在尝试让 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
运行 (withsudo
) 以及在崩溃时重新启动(不知道如何完成后者,而且我并不完全肯定我是否正确配置了前者......);我希望这个配置与我手动发出的效果相同systemctl start myapp
- 我计划使用手动命令关闭 Raspberry Pi
sudo halt -p
,并且我需要它具有与手动运行相同的效果systemctl stop myapp
关于我可以添加到我的myapp.service
文件中以实现此目的的任何想法吗?