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。この場合、 は実行中のスクリプトを検索します。ここでのベストプラクティスは、 (または、コメントで @TomYan が指摘したように )形式pgrepを使用して、目的の実行可能ファイルと一致していることを確認することです。pgrep -f-x

このようなシナリオ(障害が発生したサービスの再起動)では、独自のプロセスマネージャを使用するのではなく、プロセスマネージャの使用を検討することもできます。WSLにはSystemdを使用する機能が含まれていますが、他の理由で既に有効にしていない限り、ここではおそらくやりすぎです。監督者障害が発生したサービスを再起動できる、非常に軽量で構成が簡単なプロセス スーパーバイザーとして使用できます。

関連情報