我们正在用 Ubuntu 16.04 替换 Ubuntu 8.04 服务器。该服务器运行我们需要的单个(非操作系统)服务。(我是该服务的开发人员,而不是系统管理员,系统管理员本周休假)服务脚本大致如下:
#!/bin/sh
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
# ...
case "$1" in
start)
umask 002
#...
exit $?
;;
stop)
# ...
exit $?
;;
restart)
stop || exit $?
start
exit $?
;;
status)
# ...
exit $?
;;
*)
echo "Usage my_service (start|stop|restart|status)"
exit 1;;
esac
更新 Java 路径后...我让服务正常运行。但调用:
sudo service my_service status
返回一些“标准”的 systemd 输出,而不是脚本“status)”部分中的代码。如果我改为这样做,结果相同:
sudo /etc/init.d/my_service status
我对 systemd 认为我想知道/看到的东西不感兴趣;我只希望它执行我的代码而不是它自己的代码。
“状态”的输出由某些 Web 管理控制台解析,我不想更改该应用程序以考虑在特定服务器上安装了哪个版本的 Linux。相同服务的“状态”应使用相同格式(IMO)输出,与特定的操作系统版本无关。
我如何告诉 systemd“尊重”我的状态命令,而不是忽略它?
搜索“systemd status”没有给我带来任何结果,只是我发现 systemd 看起来相当复杂。
答案1
systemd
不支持自定义status
命令。您有以下几种选择:
- 您可以保留自定义状态命令并通过 直接调用它
systemd
。 systemd
通过 提供机器可解析的状态输出systemctl show your-service-name
。如 所示man systemctl
,您还可以使用systemctl set-property
设置自定义属性,这些属性可在 中报告状态。您可以教您的 Web 管理控制台解析此输出。