如何让 systemd 调用我的“状态”命令?

mon*_*ter 7 systemd ubuntu-16.04

我们正在用 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
Run Code Online (Sandbox Code Playgroud)

更新到 Java 的路径后......我让服务开始工作。但是调用:

sudo service my_service status
Run Code Online (Sandbox Code Playgroud)

返回一些“标准”systemd 输出,而不是脚本“状态)”部分中的代码。如果我这样做,结果相同:

sudo /etc/init.d/my_service status
Run Code Online (Sandbox Code Playgroud)

我对 systemd 认为我想知道/看到的内容不感兴趣;我只希望它执行我的代码而不是它自己的代码。

“状态”的输出由某个 Web 管理控制台解析,我不想更改该应用程序以考虑特定服务器上安装的 Linux 版本。同一服务的“状态”应使用相同的格式 (IMO) 输出,与特定的操作系统版本无关。

我如何告诉 systemd “尊重”我的状态命令,而不是忽略它?

搜索“systemd status”并没有让我找到任何地方,除了我了解到 systemd 似乎相当复杂之外。

Mar*_*erg 4

systemd不支持自定义status命令。你有几个选择:

  1. 您可以保留自定义状态命令并直接通过 调用它systemd
  2. systemd通过 提供机器可解析的状态输出systemctl show your-service-name。如 中所示man systemctl,您还可以使用systemctl set-property设置可以在状态中报告的自定义属性。您可以教您的网络管理控制台解析此输出。