2014-06-25 1 views
13

서비스가 설치되어 있는지 확인하려면 bash의 가장 좋은 방법은 무엇입니까? Red Hat (CentOS)과 Ubuntu에서 모두 작동해야합니까?서비스가 bash (CentOS 및 Ubuntu)에 있는지 확인하십시오.

생각 :

service="mysqld" 
if [ -f "/etc/init.d/$service" ]; then 
    # mysqld service exists 
fi 

또한 service 명령을 사용하여 리턴 코드를 확인할 수 있습니다.

service mysqld status 
if [ $? = 0 ]; then 
    # mysqld service exists 
fi 

최상의 해결책은 무엇입니까?

+0

사용자는''가 그것의 존재를 확인 chkconfig가. 반환 값은 존재하는 경우 0이고 그렇지 않은 경우 1입니다. 'service status'는 서비스 상태를 반환합니다. – alvits

+0

'chkconfig '는 서비스가 현재의 런레벨에서 실행되도록 설정되어있는 경우에만 참을 반환합니다 (내가 가지고있는 man 페이지에 따라). 'chkconfig --list'는 (성공과 실패의 결과로) 원하는 행동을 취하는 것처럼 보이지만, init 스크립트 자체의 존재 여부 (그리고 실행 가능성)를 검사하는 것보다 낫지 않을 수도 있습니다. –

답변

-1

ps 명령은 우분투 & RHEL에서 사용할 수 있습니다. 두 플랫폼 모두에서 작동해야합니다.

#!/bin/bash 
ps cax | grep mysqld > /dev/null 
if [ $? -eq 0 ]; then 
    echo "mysqld service exists" 
else 
    echo "mysqld service not exists" 
fi 
+0

이것은 실행 중이라고 가정합니다. 서비스가 실행 중인지 확인하고 싶지 않습니다. 서비스가 설치되어 있는지 확인하고 싶습니다. – Justin

+3

아마도이 도움이'service --status-all | grep mysql'을 사용하면 서비스가 설치되었는지 여부를 확인할 수 있습니다. 설치 한 경우 관련 서비스에 대한 결과가 없으면 결과를 제공합니다. – Rustam

8

루스 탐 Mamat이에 대한 신용을 가져옵니다

모든 서비스를 나열하는 경우, 당신이 거기에 뭐가 있는지보고 결과를 grep을 할 수 있습니다. 예 :

# Restart apache2 service, if it exists.  
if service --status-all | grep -Fq 'apache2'; then  
    sudo service apache2 restart  
fi 
+3

"service --status-all"은 알 수없는 상태의 서비스를 stderr에 씁니다. 'service --status-all 2> & 1 |을 사용하는 것이 편리 할 수 ​​있습니다. grep -Fq 'apache2'' –

2

조엘 B의 대답 떨어져 구축하려면, 여기가에 유연성의 비트와 함수 (과 같다 매개 변수 검사의 전체 부족을 참고, 당신이 통과하지 않는 경우이 중단됩니다. 이 매개 변수) :

#!/bin/sh 

serviceCommand() { 
    if sudo service --status-all | grep -Fq ${1}; then 
    sudo service ${1} ${2} 
    fi 
} 

serviceCommand apache2 status 
+0

이유는 모르지만 일부 서비스 상태와 같은 이음새가 std_err에 인쇄되므로 파이프 앞에 2> & 1을 추가해야했습니다. –

1
#!/bin/sh 

service=mysql 
status=$(/etc/init.d/mysql status) 
print "$status" 
#echo $status > /var/log/mysql_status_log 
관련 문제