在 Debian WSL 上重新啟動進程的腳本

在 Debian WSL 上重新啟動進程的腳本

我在 Debian 11 WSL 上安裝了 amule-daemon。 amuleweb 進程時不時崩潰,所以我需要重新啟動它。

我正在嘗試使用以下 bash 腳本自動執行此操作:

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

但無論 amuleweb 是否正在運行(我正在使用“ps aux | grep amule”進行檢查),腳本總是返回“amuleweb is running..”

這是 amuleweb 停止的範例。

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

如果我直接從終端機執行 pgrep 命令,它可以工作,但在我的腳本中它總是返回“0”。

我如何解決它?謝謝

答案1

在此進行有根據的猜測,您的腳本名稱可能包含字串amuleweb。如果是這種情況,那麼pgrep就是找到正在運行的腳本。這裡的最佳實踐是使用pgrep -f(或-x,正如 @TomYan 在評論中指出的那樣)表單來確保您匹配所需的可執行檔。

您也可以考慮使用流程管理器來處理此類場景(重新啟動失敗的服務),而不是自行部署。雖然 WSL 現在包含使用 Systemd 的功能,但這可能有點過頭了,除非您已經出於其他原因啟用了它。看一眼主管作為一個相當輕量級、易於配置的進程管理程序,可以重新啟動失敗的服務。

相關內容