2014-06-25 26 views
13

Bir hizmetin yüklenip yüklenmediğini kontrol etmek için bash'un en iyi yolu nedir? Hem Red Hat (CentOS) hem de Ubuntu'da çalışmalı mı?Hizmetin bash (CentOS ve Ubuntu) içinde olup olmadığını kontrol edin

Düşünme:

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

da service komutunu kullanın ve dönüş kodunu kontrol eder misiniz.

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

En iyi çözüm nedir?

+0

Kullanıcı '' varlığını kontrol etmek için chkconfig. Varsa, dönüş değeri 0 ve değilse 1'dir. 'service status', bir hizmetin durumunu döndürür. – alvits

+0

'chkconfig ' yalnızca, hizmet geçerli çalışma seviyesinde çalışacak şekilde yapılandırılmışsa (buradaki man sayfasına göre) true değerini döndürür. chkconfig --list'in burada istenen davranışa sahip olduğu görülüyor (başarı ve başarısızlık çıktısının maliyeti), ancak init betiğinin kendisinin (ve çalıştırılabilirliğinin) varlığını kontrol etmekten daha iyi olabilir veya olmayabilir. –

cevap

-1

Bunu deneyin, ps komutu hem Ubuntu & RHEL'de kullanılabilir, bu her iki platformda da çalışmalıdır.

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

Bu, çalıştığını varsayar. Hizmetin çalışıp çalışmadığını kontrol etmek istemiyorum, hizmetin yüklü olup olmadığını görmek istiyorum. – Justin

+3

Belki bu bir yardımcı 'servis --status-hepsi | grep mysql 'bu şekilde servisin kurulu olup olmadığını kontrol edebilir, eğer kurulu ise, eğer ilgili servis için sonuç yoksa, sonuç verir. – Rustam

8

Rüstem Mamat bunun için kredi alır:

tüm hizmetlerini listelerseniz, orada ne olduğunu görmek için sonuçları grep edebilirsiniz. Ör:

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

"service --status-all", bilinmeyen durumdaki hizmetleri stderr'e yazar. 'Service --status-all 2> & 1 | kullanımı kullanışlı olabilir. grep -Fq 'apache2' –

2

Joel B'nin cevabın kapalı oluşturmak için, burada ilave esneklik biraz bir fonksiyonu (gibidir parametre kontrol eksikliği tamamlamak Not; Eğer geçmek yoksa bu kıracak. 2 parametre):

#!/bin/sh 

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

serviceCommand apache2 status 
+0

neden bilmiyorum ama bazı servis durumu gibi dikişler std_err'a yazdırılıyor, bu yüzden borudan önce 2> & 1 eklemem gerekiyordu –

1
#!/bin/sh 

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