Linux
無法停止使用 systemctl start 啟動的螢幕
在 ubuntu 伺服器 20.04 上
我在這樣的螢幕會話中為 Minecraft 伺服器創建了一個服務定義
[Unit] Description=Minecraft Server After=network.target [Service] User=minecraft Nice=1 KillMode=none SuccessExitStatus=0 1 #ProtectHome=true ProtectSystem=full PrivateDevices=true NoNewPrivileges=true WorkingDirectory=/home/minecraft ExecStart=/usr/bin/screen -AmDS "minecraft-server" /usr/bin/java -Xmx12G -Xms4G -jar /home/minecraft/minecraft-server.jar nogui ExecStop=/usr/bin/screen -r "minecraft-server" -X quit ExecStopPost=kill -9 $(ps -ef | grep '[/]home/minecraft/minecraft-server.jar' | grep -v SCREEN | awk '{print $2}') ExecStopPost=rm -f /home/minecraft/Blumentopf/session.lock Restart=always RestartSec=2 [Install] WantedBy=multi-user.target
什麼有效
systemctl start minecraft.service
⇒ 螢幕會話開始,使用者 Minecraft 可以進入它- 以使用者 minecraft 登錄並執行
screen -AmDS "minecraft-server" /usr/bin/java -Xmx12G -Xms4G -jar
- 它阻塞了終端
- 從另一個外殼我可以進入螢幕會話
- 以使用者 minecraft 登錄並執行
screen -r "minecraft-server" -X quit
退出正在執行的 Minecraft 伺服器- 殺死正在執行的服務的正在執行的java應用程序立即重新啟動服務
什麼不起作用
systemctl stop minecraft.service
⇒ 這只是掛起幾秒鐘,當它返回時,服務仍在執行。是的仍在執行,未重新啟動(相同的 PID,沒有斷開連接,沒有新日誌)然後我可以登錄到螢幕會話並停止服務,而不會被 systemctl 自動重新啟動。但到底是什麼?命令按預期工作,為什麼 systemctl 不能在螢幕會話中停止(或重新啟動)程序中的 java?
嘗試將服務定義行更改
KillMode=none
為KillMode=control-group
.如果可以,請測試一下;除非你有在 mode 下執行的目的
none
。