Wir ersetzen einen Ubuntu 8.04 Server durch einen Ubuntu 16.04. Der Server führt einen einzelnen Dienst (ohne Betriebssystem) aus, den wir benötigen. (Ich bin der Entwickler dieses Dienstes und nicht der Systemadministrator, der diese Woche im Urlaub ist.) Das Dienstskript sieht ungefähr so aus:
#!/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
Nachdem ich den Pfad zu Java aktualisiert habe ... habe ich den Dienst zum Laufen gebracht. Aber anrufen:
sudo service my_service status
Gibt anstelle des Codes im Teil "status)" des Skripts eine "Standard" -Systemausgabe zurück. Gleiches Ergebnis, wenn ich dies stattdessen mache:
sudo /etc/init.d/my_service status
Ich bin nicht daran interessiert, was systemd denkt, ich möchte wissen / sehen; Ich möchte nur, dass es meinen Code anstelle seines eigenen ausführt.
Die Ausgabe von "status" wird von einer Webverwaltungskonsole analysiert, und ich möchte diese Anwendung nicht ändern müssen, um zu berücksichtigen, welche Linux-Version auf einem bestimmten Server installiert ist. "Status" für denselben Dienst sollte unabhängig von der jeweiligen Betriebssystemversion im selben Format (IMO) ausgegeben werden.
Wie kann ich systemd anweisen, meinen Statusbefehl zu "respektieren", anstatt ihn zu ignorieren?
Die Suche nach "systemd status" brachte mich nicht weiter, abgesehen von der Tatsache, dass ich erfahren habe, dass systemd ziemlich kompliziert erscheint.
/lib/lsb/init-functions
und andere Dateien. Dort können sie machen, was sie wollen. Sie könnten sogar exit
Ihren gesamten Code unten aufrufen und ignorieren.
/etc/init.d/my_service status
nicht genau das tun, was Sie geschrieben haben.