我们有一个简单的systemd脚本,可以以服务方式启动MineCraft服务器。CentOS 7也是如此。下面是脚本:
[Unit]
Description=Minecraft Server
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/root/Minecraft
ExecStart=/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动服务很好,但是当停止时,服务仍然处于失败状态。请参见:
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: active (running) since Mon 2015-06-01 16:00:12 UTC; 18s ago
Main PID: 20975 (java)
CGroup: /system.slice/minecraftd.service
└─20975 /bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
systemctl stop minecraftd.service
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: failed (Result: exit-code) since Mon 2015-06-01 16:01:37 UTC; 3s ago
Process: 20975 ExecStart=/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui (code=exited, status=143)
Main PID: 20975 (code=exited, status=143)
有什么想法吗?
谢谢
发布于 2015-06-01 16:55:50
退出代码143意味着程序接收到一个SIGTERM信号来指示其退出。JVM捕获信号,执行干净的关机操作,即运行所有已注册的关机挂钩,但仍然以143的退出代码退出。这正是Java的工作方式。
您应该能够通过将退出代码添加到单元文件中作为“成功”退出状态来抑制这种情况:
[Service]
SuccessExitStatus=143
发布于 2017-12-30 10:34:39
为了补充Michael的回答,退出代码143在这里是正常的,这是java接收SIGTERM信号的方式,由systemd发送来停止进程。SIGTERM信号的数值为15 (参见man signal
)。
现在,根据Posix规范,“由于接收到信号而终止的命令的退出状态应报告为大于128”。(http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_08_02)
这里,Java添加了128 + 15,您得到的退出代码为143。
这里的这个非零退出代码很有意义,因为这样可以看到您的java程序由于外部信号而退出,并且您有机会知道是哪个信号。
https://serverfault.com/questions/695849
复制相似问题