Как заставить systemd вызывать мою команду «status»?

Мы заменяем сервер Ubuntu 8.04 на Ubuntu 16.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, я хочу знать / видеть; Я просто хочу, чтобы он выполнял мой код вместо своего собственного.

Вывод «status» анализируется какой-то консолью веб-управления, и я не хочу, чтобы мне приходилось изменять это приложение, чтобы учесть, какая версия Linux установлен на определенном сервере. "status" для той же службы должен выводиться в том же формате (IMO), независимо от конкретной версии ОС.

Как мне сказать systemd "уважать" мою команду status вместо того, чтобы игнорировать ее?

"systemd status" никуда меня не привел, за исключением того факта, что я узнал, что systemd кажется довольно сложным.

7
задан 6 October 2016 в 17:32
1 ответ

systemd не поддерживает пользовательские команды status. У вас есть пара альтернатив:

  1. Вы можете сохранить пользовательскую команду состояния и вызвать её напрямую через systemd.
  2. systemd предоставляет машинно-параметрический вывод состояния через systemctl show your-service-name. Как видно из man systemctl, Вы также можете использовать systemctl set-.свойство для установки пользовательских свойств, о которых можно сообщить в состоянии. Вместо этого вы можете научить вашу консоль web-менеджмента разобрать этот вывод.
4
ответ дан 2 December 2019 в 23:46

Теги

Похожие вопросы