On 16/05/13 7:44 PM, Özgür Kılıçaslan wrote:
> # service mysql status
> # service ssh status
> # service dovecot status
> 
> Bu üçünden sonra da
> 
> # echo $?
> 0
> çıktısı veriyor. Scriptte bir yanlış mı var acaba?

Bu yazdiginiz uc daemon da upstart tarafindan yonetiliyor. /etc/init/
altindan kontrol edebilirsiniz. postfix'in ise geleneksel init
tarafindan baslatildigina emin olmakla birlikte cron'unuzdaki geri kalan
sureclerin nasil kontrol edildigini bilmiyorum. Eger geri kalanlar
upstart tarafindan kontrol edilmiyorlarsa, log dosyasinda sadece upstart
tarafindan yonetilenleri gormek aslinda biraz supheli oluyor. Betikten
beklediginiz davranis bu mu bilemiyorum tabii.

"service <daemon> status" komutunu upstart tarafindan yonetilen bir
surec icin calistirdiginizda aslinda "status <daemon>" calistirmis
oluyorsunuz. Eger betikten beklediginiz davranis bu ilettiginiz davranis
degilse "status <daemon>" bir nedenden oturu surekli 0'dan farkli bir
exit code donduruyor. Siz de bu yuzden her bes dakikada bir bu uc sureci
yeniden baslatiyorsunuz.

Eger yapmak istediginiz bes dakikada bir kontrol yapip, calismayanlari
calistirmaksa pidof kullanabilirsiniz alternatif olarak. Onun da
sikintisi service ve pidof tarafindan farkli isimlendirmelerin
kullanilmasi olacaktir. Ornegin postfix icin pidof kullanacaksaniz
"pidof master" demeniz gerekiyor. Misal olmasi icin su kisa betigi
paylasayim. pidof -s tek bir PID dondurmesi icin, man sayfasindan
bakabilirsiniz zaten. Yeni bir ekleme yapacaginiz zaman services kismina
pidof tarafindan aranacak surec ismini, case altina ise service komutuna
verilecek ismi eklemeniz yeterli. Hem bu sekilde cron'unuzu ayni islerle
doldurmamis olursunuz.

#!/bin/bash

logFile=/var/log/scrt.log
services="mysqld apache2 dovecot master"

startService() {
case $1 in
mysqld)
        service mysql start
;;
apache2)
        service apache2 start
;;
dovecot)
        service dovecot start
;;
master)
        service postfix start
;;
esac
}

for serviceToBeChecked in $services; do
        if [ ! $(pidof -s $serviceToBeChecked) ]; then
        startService $serviceToBeChecked 1 > /dev/null
        echo $(date) [$serviceToBeChecked] >> logFile
        fi
done
_______________________________________________
Linux-sunucu E-Posta Listesi
[email protected]

Liste kurallarını http://liste.linux.org.tr/kurallar.php  bağlantısından 
okuyabilirsiniz;

Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen 
e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1 
dakika içinde üyeliğinizi sonlandırabilirsiniz.
https://liste.linux.org.tr/mailman/listinfo/linux-sunucu

Cevap