サービスが実行されていることを確認するスクリプトbash

サービスが実行されていることを確認するスクリプトbash

私はカスタマイズされた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

関連情報