Debian
systemd:服務缺少 ExecStart= 和 ExecStop= 設置。拒絕
我正在嘗試通過
systemd
. 這是我的服務文件:[Unit] Description=MyApp Service After=multi-user.target [Service] Type=simple Restart=always ExecStart=sudo /usr/bin/java -jar /home/pi/myapp.jar [Install] WantedBy=multi-user.target
我把它複製到
/lib/systemd/system/myapp.service
. 然後我執行:sudo systemctl enable myapp
然後我檢查狀態:
sudo systemctl status myapp
我看到這些錯誤:
● myapp.service - MyApp Service Loaded: error (Reason: Invalid argument) Active: inactive (dead) Sep 29 09:56:24 raspberrypi systemd[1]: [/lib/systemd/system/myapp.service:8] Executable path is not absolute, ignoring: sudo /usr/bin/java -jar /home/pi/myapp.jar Sep 29 09:56:24 raspberrypi systemd[1]: myapp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
當我這樣做時,
which java
我看到:pi@raspberrypi:/lib/systemd/system $ which java /usr/bin/java
所以我不明白為什麼
systemd
抱怨可執行路徑。有什麼想法可以解決嗎?
sudo
路徑不是絕對的。如果您的 systemd 單元是系統單元,則無論如何都不需要 sudo,因為系統單元預設以 root 身份執行。編輯:與其以 root 身份執行 JVM 和整個 Java 應用程序,不如以非特權使用者身份執行該服務。如果應用程序需要某些通常不授予非特權使用者的功能,則可以通過
AmbientCapabilities
設置添加它。例如,通過將以下行添加到該[Service]
部分:AmbientCapabilities=CAP_SYS_RAWIO User=nobody
該服務以使用者身份執行,
nobody
但被授予該CAP_SYS_RAWIO
功能。