OK, hier ist mein Dilemma: Ich verwende den Headless-Ubuntu-Server 18.04.3 LTS auf einem Dell PowerEdge T710-Server und schreibe ein Bash-Skript, damit ich die Apache PHP Mod-Versionen einfach ändern kann, ohne Folgendes manuell verwenden zu müssen:
a2dismod php<version>
a2enmod php<version>
systemctl restart apache2
Zu Beginn des Skripts wird eine „if“-Bedingung verwendet, um zu prüfen, ob der Benutzer mit einem Benutzerkonto oder einem Root-Konto angemeldet ist. Dies geschieht über das Statusbit der UID, d. h.:
if ((UID)); then
something here
elif ((!UID)); then
something here
fi
Verwenden von ((UID)), um zu prüfen, ob das Bit wahr ist, und Verwenden von ((!UID), um zu prüfen, ob das Bit falsch ist. Aber hier liegt das Problem: Ich möchte noch etwas mehr Prüfung hinzufügen, um sicherzustellen, dass Apache tatsächlich ausgeführt wird. Ich würde lieber den Booleschen Wert „true“ oder „false“ verwenden, als etwas wie: -
systemctl status apache2
das gibt eine Menge Ausgabe. Gibt es ein Statusbit für Apache? Dann kann ich eine Prüfung durchführen, um sicherzustellen, dass Apache tatsächlich ausgeführt wird, bevor ich mit der Änderung der phpmod-Version fortfahre.
Dies ist das Skript, das ich bisher habe:https://pastebin.com/HyCjbn59
Die IT muss nicht nur prüfen, ob Apache ausgeführt wird, sondern auch, ob die verschiedenen Apache-PHP-Module tatsächlich installiert sind, bevor versucht wird, das richtige Modul zu aktivieren. Ist dies nicht der Fall, wird das Skript ausgeführt: -
apt install libapache2-mod-php<version>
Antwort1
Sie können den is-active
Unit-Befehl verwenden systemctl
, der „einen Exit-Code 0 zurückgibt, wenn mindestens eine [Unit] aktiv ist, andernfalls einen Wert ungleich 0“:
if systemctl is-active --quiet apache2; then
echo running
else
echo not running
fi
Wenn Sie lieber einen Parameter verwenden möchten, der $?
den Exit-Code des letzten Befehls enthält, können Sie einfach testen, ob er lautet 0
:
systemctl is-active --quiet apache2
if [ $? -eq 0 ]; then
echo running
else
echo not running
fi
Weiterführende Literatur
Antwort2
Das Definieren eigener Exit-Codes verwendet weiterhin dieselbe Logik, wie @Dessert in seiner Antwort beschreibt.
#!/bin/bash
systemctl is-active -q apache2 && status=TRUE || status=FALSE
case $status in
TRUE)
echo do something ;;
FALSE)
echo do sothing else ;;
esac