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