03 Aralık 2007

swatch logrotate'den sonra log dosyasını izlemezse...

Bir süredir log dosyalarını izlemek için  swatch kullanıyorum. swatch'ın bir sonraki gün log dosyalarını izlemediğini fark ettim. Sebebini araştırdığımda logrotate'den sonra eski log dosyasını izlediğini ve yeni dosyayı izlemediğini gördüm. Yani syslog dosyası gece syslog.0 oluyor ve swatch syslog.0'ı izlemeye devam ediyor. Bu sorunu çözmek için logrotate'den sonra swatch'ı restart etmek yetecekti ama nasıl?

swatch'ın start, restart, stop edilebilmesi için bir script yazmak gerekiyordu. Kolları sıvayıp önce şöyle bir script yazdım (/etc/init.d/swatchd dosyasına) :

#!/bin/sh

#               Debian Gnu/Linux Shell Script
#
# swatchd  : swatch'in baslatilmasi, durdurulmasi veya tekrar baslatilmasi
#                  icin script.
#
# Aciklama: logrotate'den sonra swatch log dosyalarini dinlemediginden,
#                  logrotate'den sonra swatch'in restart edilmesi gerekiyor.
#                  /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna
#                  /etc/init.d/swatch restart > /dev/null satiri eklenirse, sysklogd restart olduktan hemen sonra
#                  swatch da restart olacaktir.
#
# Version:    1.0  03-12-2007  aytekinaygun@gmail.com


ps ax | grep swatch > /tmp/swatch.pid
PID=`cat /tmp/swatch.pid | grep swatchrc | awk '{print $1;}'`


 case "$1" in

  start|"")
        if [ "$PID" = "" ]; then
                swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log"
                echo "swatch baslatildi..."
        else
                echo "swatch zaten calisiyor..."
        fi
        ;;


   stop)
        if [ "$PID" = "" ]; then
                echo "swatch zaten calismiyor..."
        else
                kill -9 $PID
                echo "swatch durduruldu..."
        fi
        ;;


restart)
        if [ "$PID" = "" ]; then
                swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log"
                echo "swatch calismiyordu ve baslatildi..."
        else
                kill -9 $PID
                swatch --daemon -c /etc/swatchrc --tail-file="/var/log/syslog /var/log/auth.log"
                echo "swatch tekrar baslatildi..."
        fi
        ;;


      *)
        echo "Kullanim parametreleri : /etc/init.d/swatchd {start|stop|restart}"
        ;;

esac

exit 0

Sonra da /etc/cron.daily/sysklogd, /etc/cron.weekly/sysklogd dosyalarinin sonuna;

  /etc/init.d/swatch restart > /dev/null

satırını ekledim. Böylece gece sysklogd restart olduktan hemen sonra swatch'da restart oluyor ve istediğim log dosyalarının izlenmesine devam ediliyor.