我正在将服务启动脚本从 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
上面链接中的另一个答案添加了更多细节。