bash 스크립트가 MariaDB 서비스 상태를 올바르게 제공하지 않음
CentOS 7에서 MariaDB 서비스가 실행 중인지 여부를 확인해야 합니다.
이를 위해 .sh 파일을 생성하기만 하면 됩니다.이 파일의 내용은 다음과 같습니다.
#!/bin/bash
service=mariadb
if ( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 )
then
echo "$service is running!!!"
else
echo "$service is not running!!!"
fi
다음 명령을 실행하면
ps -ef | grep -v grep | grep mariadb | wc -l
서비스가 실행 중인 경우 반환 1
서비스가 중지되면 0을 반환합니다.
위의 출력은 정확합니다.
근데 제가execute my .sh file
잘못된 출력을 제공합니다.
서비스가 실행 중인 경우 반환(mariadb가 실행되지 않음!!!)
서비스가 stop return인 경우(mariadb는 실행되지 않습니다!!!)
(
서브셸을 작성하기 위한 것으로, 여기서 원하는 것은 아닐지도 모릅니다.할 수 있다
if [ $(ps -ef | grep -v grep | grep "$service" | wc -l) -gt 0 ]; then
근데 이게 더 쉬울 것 같아요pgrep
프로세스를 찾기 위해 직접 파이프라인을 구축하는 대신 말이죠.시험:
#!/bin/bash
service=mariadb
if pgrep -f "$service"
then
printf '%s is running!!!' "$service"
else
printf '%s is not running!!!' "$service"
fi
pgrep
를 사용하여 종료합니다.0
종료 상태일 때, 무언가를 발견했을 때, 또는 성공입니다.1
일치하는 프로세스를 찾을 수 없는 경우.
또, 나는 로 바꿨다.printf
대신echo
이 예에서는 문제가 되지 않습니다만,echo
대부분의 경우 선호되는 방법이 아닙니다.
괄호 안의 시도에서, 당신은 다음을 사용하려고 합니다.>
비교 대상이 됩니다만, 실제로는 리다이렉션 연산자로서 셸에 의해서 소비됩니다(이 파일에는0
지금 그 디렉토리로 이동합니다).산수를 하려면 더블 패런이 필요해요.((...))
또는 위에서처럼 대괄호를 사용하여 테스트할 수도 있습니다.단일 괄호는 포함된 명령을 하위 쉘에서 실행하는 것을 의미합니다.
언급URL : https://stackoverflow.com/questions/38813506/bash-script-not-giving-the-mariadb-service-status-correctly
'programing' 카테고리의 다른 글
대용량 파일을 한 줄씩 읽는 방법 (0) | 2022.09.08 |
---|---|
phpmyadmin 오류 해결 방법 (0) | 2022.09.08 |
어레이를 청크로 분할하다 (0) | 2022.09.06 |
Python non local 문 (0) | 2022.09.06 |
GSON과의 JSON 해석 중 Enum 사용 (0) | 2022.09.06 |