Como fazer o systemd chamar meu comando “status”?

5

Estamos substituindo um servidor Ubuntu 8.04 por um Ubuntu 16.04. O servidor executa um único serviço (não SO) que precisamos. (Eu sou o dev desse serviço, e não o sysadmin, que está de férias esta semana) O script de serviço é assim:

#!/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

Depois de atualizar o caminho para o Java, consegui que o serviço funcionasse. Mas chamando:

sudo service my_service status

retorna alguma parte "standard" do systemd, em vez do código na parte "status" do script. O mesmo resultado se eu fizer isso:

sudo /etc/init.d/my_service status

Eu não estou interessado no que o systemd pensa que eu quero saber / ver; Eu só quero que ele execute meu código em vez de seu próprio código.

A saída de "status" é analisada por algum console de gerenciamento da web, e eu não quero ter que alterar esse aplicativo para levar em conta qual versão do Linux está instalada em um servidor específico. "status" para o mesmo serviço deve sair usando o mesmo formato (IMO), independente da versão específica do SO.

Como eu digo ao systemd para "respeitar" meu comando status, em vez de ignorá-lo?

A pesquisa por "status do systemd" não me levou a nenhum lugar, além do fato de que aprendi que o systemd parece bastante complicado.

    
por monster 06.10.2016 / 16:32

1 resposta

3

systemd não suporta comandos status personalizados. Você tem algumas alternativas:

  1. Você pode manter um comando de status personalizado e chamá-lo diretamente por meio de systemd .
  2. systemd fornece saída de status analisável por máquina via systemctl show your-service-name . Como visto em man systemctl , você também pode usar systemctl set-property para definir propriedades personalizadas que podem ser informadas novamente no status. Você poderia ensinar seu console de gerenciamento da Web a analisar essa saída.
por 06.10.2016 / 22:29