나는 사용자 정의된 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