Şeytan, Pengueni Dürterse
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
- Yaml ile kolayca güncellenebilen ayar dosyası
- Daemon kaydetme, kaldırmak ve durum bilgisi almak için kullanılacak çalıştırılabilir betik
- İş mantığınızı barındıran kodları çalıştıracak Abstract sınıf.
Ö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. (: