systemd 服务停止总是失败

systemd 服务停止总是失败

我正在将服务启动脚本从 SysV 转换为 systemd。

我们的“服务”是一个运行在 Netty 中的 java 服务器。

要启动服务,在单元文件中我有类似的内容:

[Service]
SyslogIdentifier=%N
Type=simple
ExecStart=/usr/bin/java -jar ....jar

我认为确切的命令与这里无关。一切都按照我的预期开始,一切顺利。

要关闭该服务,我们有特殊的 URL。因此,要停止服务,在单元文件中我有:

ExecStop=/usr/bin/wget -t3 -T5 -q -O- http://localhost:7090/shutdown
TimeoutStopSec=10
Restart=on-failure

每当我打电话时,systemctl stop server我总是得到以下结果:

● server.service - some Control System server
   Loaded: loaded (/etc/systemd/system/server.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2019-03-24 00:54:19 UTC; 3s ago
  Process: 8756 ExecStop=/usr/bin/wget -t3 -T5 -q -O- http://localhost:7090/shutdown (code=exited, status=0/SUCCESS)
  Process: 8597 ExecStart=/usr/bin/java -jar ....jar (code=exited, status=0/SUCCESS)

服务停止。但为什么我得到了failed (Result: exit-code)

编辑:运行journalctl -u server,我看到:

Mar 24 19:10:10 hive systemd[1]: Stopping some Control System server...
Mar 24 19:10:10 hive server[13731]: SHUTDOWN STARTING. END IN 15 SEC
Mar 24 19:10:10 hive systemd[1]: server.service: Main process exited, code=exited, status=143/n/a
Mar 24 19:10:10 hive systemd[1]: server.service: Failed with result 'exit-code'.
Mar 24 19:10:10 hive systemd[1]: Stopped some Control System server.

答案1

这个问题基本上得到了回答服务器故障

总之:

退出代码143表示程序收到SIGTERM信号指示其退出,但它没有正确处理该信号。

[这可以通过将退出代码添加到单元文件中作为“成功”退出状态来抑制:

[Service]
SuccessExitStatus=143

上面链接中的另一个答案添加了更多细节。

相关内容