私はカスタマイズされたLinuxバージョンを持っており、カーネルバージョンは次のとおりです。そして4.1.15-klk
私のプラットフォームアーキテクチャは次のとおりです。armv7l GNU/Linux
私のプロセスが実行されていることを確認しようとしています。
私はこれを試しました:
#!/bin/sh
service=myservice
if [ $(ps | grep -v grep | grep $service | wc -l) -gt 0 ]
then
echo "$service is running!!!"
else
echo "$service is not running!!!"
fi
しかし、「私のサービスが実行中です!!!」というメッセージが表示されます。
私のシステムでは利用できないため、pgrepは利用できません。
どんなアイデアがありますか?ありがとうございます!
答え1
に基づいてこの問題、短くスクリプト可能な方法は次のとおりです。
systemctl is-active --quiet service
サービスが実行中の場合、コード 0 で終了します。
sshdサービスが実行されているかどうかを印刷する例:
systemctl is-active --quiet sshd && echo "sshd is running" || echo "sshd is NOT running"
答え2
以下のスクリプトを使用して、サービスが実行されていることを確認してください。 mysqlサービスをテストして起動して終了しましたが、どちらの場合もうまくいきました。
#!/bin/bash
i=`ps -eaf | grep -i mysql |sed '/^$/d' | wc -l`
echo $i
if [[ $i > 1 ]]
then
echo "service is running"
else
echo "service not running"
fi
答え3
最後にこれを使用しました郵便はがき、次の方法で問題を解決できました。
#!/bin/sh
service=myservice
case "$(pidof $service | wc -w)" in
0) echo "$service is not running!!!"
;;
1) echo "$service is running!!!"
;;
*) echo "multiple instances running"
;;
esac
答え4
ケース機能を使用すると、これをより効果的に制御できます。
#!/bin/bash
i=$(ps -eaf | grep -i mysql | sed '/^$/d' | wc -l); echo $i
case $i in
0) echo "The mysql service is 'not running'.";;
1) echo "The mysql Service has 'failed'. You may need to restart the service";;
2) echo "The mysql service is 'running'. No problems detected.";;
esac
最初の例にはバグがあります。 '|'、'||'、'&'、または '&&' の前後にスペースが必要です。
だから読むべきです。
i=$(ps -eaf | grep -i mysql | sed '/^$/d' | wc -l); echo $i