Skript zum Neustarten des Prozesses unter Debian WSL

Skript zum Neustarten des Prozesses unter Debian WSL

Ich habe amule-daemon auf Debian 11 WSL installiert. Der Prozess amuleweb stürzt ab und zu ab, sodass ich ihn neu starten muss.

Ich versuche dies mit dem folgenden Bash-Skript zu automatisieren:

#!/bin/bash

if [[ $(pgrep amuleweb) ]]; then
   echo "amuleweb is running..";
else
   echo "amuleweb is not running, restarting now..";
   amuleweb --amule-config-file=/home/debian/.aMule/amule.conf
fi

aber egal, ob amuleweb läuft oder nicht (ich überprüfe es mit „ps aux | grep amule“), das Skript gibt immer „amuleweb läuft …“ zurück.

Dies ist ein Beispiel mit gestopptem Amuleweb.

debian@CUSPIDE:~$ ./amuleweb.sh
amuleweb is running..
debian@CUSPIDE:~$ [[ $(pgrep amuleweb) ]]
debian@CUSPIDE:~$ echo $?
1

Wenn ich den Befehl pgrep direkt von einem Terminal aus ausführe, funktioniert er, aber in meinem Skript gibt er immer „0“ zurück.

Wie behebe ich das? Danke

Antwort1

Hier kann man nur vermuten, dass der Name Ihres Skripts die Zeichenfolge enthalten könnte amuleweb. Wenn dies der Fall ist, pgrepwird das laufende Skript gesucht. Am besten verwenden Sie hier die Form pgrep -f(oder -x, wie @TomYan in den Kommentaren anmerkte), um sicherzustellen, dass Sie die gewünschte ausführbare Datei finden.

Sie könnten für diese Art von Szenario (Neustart eines fehlgeschlagenen Dienstes) auch die Verwendung eines Prozessmanagers in Betracht ziehen, anstatt Ihren eigenen zu erstellen. Obwohl WSL jetzt die Möglichkeit bietet, Systemd zu verwenden, wäre das hier wahrscheinlich übertrieben, es sei denn, Sie haben es bereits aus anderen Gründen aktiviert. Sehen Sie sich an:Betreutals relativ leichter, einfach zu konfigurierender Prozess-Supervisor, der fehlgeschlagene Dienste neu starten kann.

verwandte Informationen