Linux Planlanmış Görevler ve Cron Servisi

Share

Sistemde yapılması gereken rutin işlerin zamanı geldiğinde otomatik olarak yapılması işine zamanlanmış görevler deniyor. Bu rutin işlere örnek söylemek gerekirse; benim her pazartesi sistemi yedeklemem gerekiyor diyelim, bunu her pazartesi elle yapmak yerine bu işi zamanlanmış görevlere ekleyerek otomatiğe bağlayabilirim. İşte zamanlanmış görevler bu ve bunun gibi durumlarda sıkça kullanılıyor.

  • /etc/init/init.d – sistem açıldığında açılacak deamonlar burada yer alır. Örn: cron,networking,apache2,ftpd,sshd,mysql vb.
/etc/init.d/cron status	#Belirtilen daemonın çalışma durumunu öğrenmek için kullanılır.
systemctl status cron	#Belirtilen daemonın çalışma durumunu öğrenmek için kullanılır.
status cron
  • /etc/init.d/cron – ardından 2 defa tab tuşuna basarak bu daemonla yapılabilecek işlemler listelenir.
  • /var/spool/cron/ctontabs/ (kullanıcılara ait crontablar burada tutulur.)
  • Sistem crontab dosyası (/etc/cron) : Linux’ta cron servisinin çalışmasıyla birlikte belli periyotlarla yürütülen görevler crontab’da tutulur.
sudo crontab -e -u UserName	(Belirtilen kullanıcının crontab'ına girmek için kullanılır.)

Cron

Rutin tekrarları sağlayan zamanlanmış görevleri yerine getirmemizi sağlayan servisimizin adı cron‘dur.

Crontab’ın bulunduğu dosya yolu çoğu zaman “/etc/crontab” şeklindedir ve $ crontab -e komutu ile otomatik olarak erişilebilir. Karşımıza gelecek olan ekranda basit bir text editörü olacaktır ve en alt satır ise bizim için ayrılmış durumdadır.

┌───────────── dakika (0 – 59)
│ ┌───────────── saat (0 – 23)
│ │ ┌───────────── takvim günü (1 – 31)
│ │ │ ┌───────────── ay (1 – 12)
│ │ │ │ ┌───────────── gün (0 – 6) (0=Pazar, 1=Pazartesi … 6=Cumartesi
│ │ │ │ │                                            ve ayrıca sadece Pazar günü için 7=Pazar)
│ │ │ │ │
│ │ │ │ │
* * * * *  çalıştırılmak istenen komut

Yukarıdaki crontab evrenseldir ve crontab çalıştırmak için sisteminizin unix olması yeterlidir.

Şöyle ki; ben her ayın ilk günü sabah saat 07:30’da /home/kullaniciadi dizinimin yedeğini /yedek/kullaniciadi klasörüme almak istiyorum.
Bunun için yazmam gereken komut aşağıki gibi olmalıdır.

$ 30 07 1 * * tar -zcvf /yedek/kullanici.tar.gz /home/kullanici.tar.gz

Başka bir örnek;

(Her dakika, date komutundan aldığı veriyi sayac.txt dosyasına ekle.)

$  *  * * * * date >> ~/Desktop/sayac.txt