Şeytan, pengueni dürterse

28 Mart 2010 · netologist · 3 dakika, 441 kelime

Günümüzde birçok site arkada yapılacak görevleri çalıştırmak için görev yöneticileri kullanılır. Crontab (Zaman ayarlı) ve Daemon (kendi halinde çalışan) iki görev yöneticinin arasındaki bence tek fark (durum bu kadar basit olmasada) Crontab’ın 1 dakikanın altındaki süreçlere göre çalışmamasıdır. Bu görevler için Daemon denilen ve /etc/init.d altında tetiklenen ve sinyallerle çalıştırılıp durdurulabilen ve process id değeri üreten bir teknolojiye ihtiyaç duymasıdır. Daemon’lar init.d altında bir çalıştırıcı scripte sahip olmaya bilir ama durdumak istendiğinde güç kullanılarak öldürülmesi (kill) gerekir ki, kritik işlerde bu pek tehlikeli bir yöntemdir. Init.d altındaki başlatma scripti bir proses(PID) dosya yaratır ve daemon’u çalıştırır. Sonrasında durdumak isterse daemon’a sinyal gönderir. Böylece uygulama durma sinyalini görünce düzgün bir şekilde sonlanır. Crontab ise belli bir işin bellir bir saatte yapılmasını sağlar. Saatte bir, her 15 dk.‘da bir ayın 5. günü, her çarşamba saat 15’te gibi…

Periodic ile ilgili daha detaylı bilgiyi şuradan alabilirsiniz.

Chronical Job Management Projesi

Bu proje benim yapacağım hem cron hem de daemon desteği ile melez çalışacak bir projedir. Henüz fikir halindedir. Projene adresine şuradan ulaşılabilir.

Bu proje servis işlerinizi hızlı ve kolay bir şekilde merkezi bir yerden yönetmeniz, durumunu kontrol etmenizi amaçlar.

Özellikleri

Örnek proje ayar dosyası (task.config);

# Period Format
# second minute hour day month dayOfWeek weekOfMonth
# second: 0-59
# minute: 0-59
# hour: 0-23
# day: 1-31
# month: 1-12
# dayOfWeek: 1-7
# weekOfMonth: 1-5

# proje adina göre tek bir daemon oluşur.
# Bu daemon işlerin tamamını alt prosesler yaratarak yönetir.

proje_adi:
    gorev_adi:
        class: Application_Jobs_SmsSender
        # her 30 saniyede bir çalış anlamında.
        period: */30 * * * * *
    change_theme:
        class: Application_Jobs_ChangeTheme
        # Mayıs ayının ikinci pazar günü saat gece 2'de
        # Anneler gününde çalış.
        period: * 2 * 5 7 2

Arayüz Sınıfı

interface Chronical_Job_Interface
{
     // Ayar dosyasına verilen sınıfların bu
     // arayüzden gerçekleştirilmesi gerekir.
     public function run();
}

Örnek Sınıfı

class Application_Jobs_SendSms
                    extends Joy_Application
                    implements Chronical_Job_Interface
{
     public function run()
     {
           // TODO: Yapılacak işler....
     }
}

Örnek log ayar dosyası;

Bu dosya chronical uygulamasının log ve pid ayarları ile ilgili bir dosyadır. Ubuntu ve debian temelli dağıtımlar için /etc/chronical.ini

[folders]
     folder.log = /var/log/
     fodler.pid = /var/run/
     folder.init.d = /etc/init.d
[defaults]
; seconds
     default.sleep_time = 5

Düşünülen betik dosyası örnek işler

# OS startup install for init.d
$ chronical install task.config

# OS startup uninstall for init.d
$ chronical uninstall task.config

# Görev çalıştırma
$ chronical start proje_adi:gorev_adi

# Görev durdurma
$ chronical start proje_adi:gorev_adi

# Görev durumunu görme
$ chronical status proje_adi:gorev_adi

Kısaca Unix sistemleri üzerinde daemon ve crontab işleri bu şekilde. (: