
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, pgrep
wird 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.