if と -z を使用してプロセスが実行中かどうかをテストします。

if と -z を使用してプロセスが実行中かどうかをテストします。

私のシステムには、クラッシュとして悪名高い、ある種の仕事上重要なプロセスがあります、私のネットワーク管理者。とにかく、実行中かどうかをテストし、それ以外の場合は開始するループを作成する必要があります。これまで私が思いついた内容は次のとおりです。

#!/bin/bash

while [ true ]; do 
    if [ -z $(ps aux | grep "[n]m-applet") ]; then
        echo "Bugger died, resurrecting..."
        nm-applet >/dev/null 2>/dev/null &
        disown $!
    fi

    sleep 3
done 

残念ながら、この方法で問題が完全に解決されるわけではありません。不要な場合でもプロセスが開始されたように見え、最初の実行後に次のエラー出力が表示されます。

line 4: [: too many arguments

私がここで何を間違っているのか?

ベストアンサー1

$(...)二重引用符で囲んでください。

if [ -z "$(ps aux | grep '[n]m-applet')" ]; then

pgrepしかし、代わりにorを試すこともできますps axo cmd | grep '[n]m-applet'

おすすめ記事