서비스가 실행 중인지 확인하는 스크립트 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

관련 정보