2014-06-25 15 views
13

Jaki jest najlepszy sposób na sprawdzenie w bash, aby sprawdzić, czy usługa jest zainstalowana? Powinien działać zarówno w Red Hat (CentOS), jak i Ubuntu?Sprawdź, czy usługa istnieje w bashu (CentOS i Ubuntu).

Thinking:

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

można również użyć polecenia service i sprawdzić kod zwrotny.

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

Jakie jest najlepsze rozwiązanie?

+0

użytkownika '' chkconfig aby sprawdzić jego obecność. Wartość zwracana wynosi 0, jeśli jest obecna, a 1, jeśli nie. 'service status' zwraca status usługi. – alvits

+0

'chkconfig ' zwraca tylko wartość true, jeśli usługa jest skonfigurowana do działania w bieżącym poziomie roboczym (zgodnie ze stroną man, którą tu mam). "chkconfig --list" wydaje się mieć tutaj pożądane zachowanie (kosztem sukcesu i niepowodzenia), ale może być lepsze od sprawdzenia istnienia (i wykonalności) samego skryptu startowego. –

Odpowiedz

-1

Spróbuj tego, ponieważ polecenie ps może być używane zarówno w Ubuntu & RHEL, powinno działać na obu platformach.

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

Zakłada się, że jest uruchomiony. Nie chcę sprawdzać, czy usługa jest uruchomiona, chcę sprawdzić, czy usługa jest zainstalowana. – Justin

+3

Może to jeden help 'service --status-all | grep mysql' w ten sposób można sprawdzić, czy usługa jest zainstalowana czy nie, jeśli jest zainstalowana, daje wynik, jeśli nie ma wyniku dla powiązanej usługi. – Rustam

8

Rustam Mamat dostaje kredyt na to:

Jeśli lista wszystkich swoich usług, można grep wyniki, aby zobaczyć co jest w środku. Np:

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

"service --status-all" zapisuje usługi na nieznanym stanie na stderr. Wygodne może być użycie 'service --status-all 2> & 1 | grep -Fq 'apache2'' –

2

Aby zbudować off odpowiedź Joel B., to jest tutaj w funkcji (z odrobiną elastyczności dodanej Uwaga kompletny brak kontroli parametrów, to złamie jeśli nie mijają się. 2) parametry:

#!/bin/sh 

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

serviceCommand apache2 status 
+0

nie wiem dlaczego, ale szwy jak jakiś status usługi są drukowane na std_err, więc musiałem dodać 2> i 1 przed rurą –

1
#!/bin/sh 

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