
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
。この場合、 は実行中のスクリプトを検索します。ここでのベストプラクティスは、 (または、コメントで @TomYan が指摘したように )形式pgrep
を使用して、目的の実行可能ファイルと一致していることを確認することです。pgrep -f
-x
このようなシナリオ(障害が発生したサービスの再起動)では、独自のプロセスマネージャを使用するのではなく、プロセスマネージャの使用を検討することもできます。WSLにはSystemdを使用する機能が含まれていますが、他の理由で既に有効にしていない限り、ここではおそらくやりすぎです。監督者障害が発生したサービスを再起動できる、非常に軽量で構成が簡単なプロセス スーパーバイザーとして使用できます。