我正在使用 SystemD 服務透過螢幕控制基於 Java 的伺服器(好吧!它的 Minecraft :D),如下所示:
[Unit]
Description=mc@auth
After=local-fs.target network.target mysqld.service
[Service]
WorkingDirectory=/home/minecraft/auth
User=minecraft
Group=minecraft
Type=forking
Restart=always
RestartSec=5s
ExecStart=/bin/bash ./server.sh start
ExecStop=/bin/bash ./server.sh stop
ExecStop=/bin/bash -c "while ps -p $MAINPID > /dev/null; do /bin/sleep 1; done"
[Install]
WantedBy=multi-user.target
server.sh start
只是啟動 jar 檔案java -jar Example.jar
並輸出控制台。
當出現記憶體不足錯誤時如何重新啟動此服務?當 OOM 發生時,Java 似乎不會退出回 shell。
答案1
java -jar Example.jar -XX:+CrashOnOutOfMemory
在Systemd 單元檔案中使用server.sh
並設定。Restart=on-failure