
我在 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 的功能,但這可能有點過頭了,除非您已經出於其他原因啟用了它。看一眼主管作為一個相當輕量級、易於配置的進程管理程序,可以重新啟動失敗的服務。