Назад | Перейти на главную страницу

Как заставить 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 установлена ​​на конкретном сервере. «статус» для той же службы должен выводиться в том же формате (IMO), независимо от конкретной версии ОС.

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

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

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

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