kal*_*ise 27 systemd systemctl
我们有一个简单的 systemd 脚本来以服务方式启动 MineCraft 服务器。SO 是 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
Run Code Online (Sandbox Code Playgroud)
启动服务工作正常,但停止时,服务仍处于失败状态。看:
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)
Run Code Online (Sandbox Code Playgroud)
任何的想法?
谢谢
Mic*_*ton 39
退出代码 143 表示程序收到一个 SIGTERM 信号来指示它退出。JVM 捕获信号,执行干净的关闭,即它运行所有已注册的关闭挂钩,但仍以退出代码 143 退出。这就是 Java 的工作方式。
您应该能够通过将退出代码添加到单元文件中作为“成功”退出状态来抑制这种情况:
[Service]
SuccessExitStatus=143
Run Code Online (Sandbox Code Playgroud)
Man*_*anu 17
为了补充迈克尔的回答,退出代码 143 在这里是正常的,这是 java VM 收到 SIGTERM 信号的方式,由 systemd 发送以停止进程。SIGTERM 信号的数值为 15(请参阅参考资料man signal)。
现在根据 Posix 规范,“由于收到信号而终止的命令的退出状态应报告为大于 128”。( http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_08_02 )
这里 Java VM 加上 128 + 15,你得到这个退出代码 143。
这里的非零退出代码是有道理的,因为这允许看到您的 java 程序由于外部信号而退出,并且您有机会找出哪个信号。
| 归档时间: |
|
| 查看次数: |
47029 次 |
| 最近记录: |