:::: MENU ::::

Linux’de Zamanlanmış Görevler (Cronjob)

Cronjobs Nedir?
Cron istenilen görevlerin belirli zaman aralıkları ile arkaplanda yapılmasına izin veren bir UNIX aracıdır.

Crontab (Cron TABle) Nedir?
Çalıstırılacak görevi ve görevin çalıstırılacagı zamanı barındıran dosyadır.

Cron görevlerini ayarlama
Aşağıda /etc/crontab dosyası görülmektedir.

İlk dört satır, zamanlanmış görevlerin kullanacağı kabuk değişkenlerini tanımlamaktadır.

  • SHELL değişkeni zamanlanmış görevin hangi komut yorumlayıcı ile çalıştırılacağını gösterir.
  • PATH değişkeni ise zamanlanmış görevdeki komutların hangi klasörlerde bulunduğunu gösterir.
  • MAILTO değişkeni, cron görevlerinin çıktısının hangi kullanıcıya mail olarak gönderileceğini belirtir. MAILTO="" şeklinde yazılırsa hiçbir kullanıcıya mail gitmez.
  • HOME değişkeni ise zamanlanmış komutun ev dizini olarak nereyi algılaması gerektiği gösterilir.

Crontab Sınırlamaları

Crontab’i kullanıcı adınız /etc/cron.allow dosyasında varsa veya böyle bir dosya bulunmuyorsa ve adınız /etc/cron.deny dosyasinda yoksa kullanabilirsiniz.

Tüm kullanıcıların Crontab’i kullanabilmesi için cron.deny dosyasının bulunması ve boş olması gerekir. cron.deny dosyasi bulunmuyorsa Crontab’i yalnizca Root kullanıcı kullanabilir.

Crontab Komutları
crontab -e Crontab dosyasi bulunuyorsa düzenlemenizi, bulunmuyorsa yaratmanızı sağlar.
crontab -l  Crontab dosyasını gösterir.
crontab -r Crontab dosyasını siler.

Crontab Dizilimi

Crontab dosyasi sırası ile

  • Dakika (0-59),
  • Saat (0-23),
  • Ayin Günü (1-31),
  • Ay (1-12),
  • Haftanin Günü (0-6) (Pazar = 0) alanlarını ve çalıştırılacak komutu barındırır.

Bir alan için girilecek birkaç değer  “,”(virgül) ile ayrılabilir.

Örnek Crontab Dosyasi Hergün saat 18:30’da /tmp klasöründeki dosyaları silen crontab satırı aşağıdaki gibidir.

Asağıda birkaç zamanlama örneği ve çalıştırılma zamanları verilmiştir.

dak saat gün/ay ay gün/hafta  Çalıştırılma Zamanı

30 0 1 1,6,12 *         Ocak, Haziran ve Aralık aylarının birinci günü saat 00:30’da

0 20 * 10 1-5             Ekim ayının her Pazartesi ve Cumasi saat 20:00’de

0 0 1,10,15 * *          Her ayın 1’inde, 10’unda ve 15’inde gece yarısı (00:00)

5,10 0 10 * 1             Pazartesileri ve her ayın 10. gününde saat 12:05 ve 12.10’da

Email İptali  Cron, öntanımlı olarak işlemi gerçekleştirdiğinde kullanıcıya email gönderir. Eğer bunun gerekli olmadıgını düşünüyorsanız aşağidaki kodu cron görev satirinin sonuna eklemelisiniz. >/dev/null 2>&1 /dev/null

Unix benzeri işletim sistemlerinin aygıtlar dizininde (/dev) bulunan özel bir belgedir. Bu belgeye yazılan her tür ve her hangi miktarda olan veriyi sistem yok sayar ve yazan işleme EOF gönderilir. Bu açıdan /dev/null bir kara deliğe benzetilir.

Yaygın kullanımlarından biri uygulamaların istenmeyen çıktılarını, yönlendirme aracılığı ile, devre dışı bırakmaktır.

Çıktısını görmek istemediğimiz birbetik (script)için;

Üstteki örnekte, önce > aracılığı ile olağan çıktı (1) /dev/null’a yönlendirilir.

Sonra da 2>&1 ile hata çıktıları (2) olağan çıktı ile aynı yöne gönderilir.

örn:

Log Dosyası Oluşturma Cron’un yaptığı işlemleri bir log dosyasında tutmak isterseniz, outputu aşağıdaki gibi bir dosyaya push edebiliriz.

Contab dosyasına yapmasını istediğimiz işlemleri yazıyoruz.

Bu işlemler arka planda yapıldığı için bunların kontrol etmek için  /var/log/cron dosyasının çıktısına bakabiliriz.

Cronjob Hakkında birkaç ipucu

Görevlerin çalıştırılma zamanını belirlerken birden fazla deger virgül ile ayrilarak yazilabilir.

Ayrica aşagıdaki kodlar da işlemin  1, 2, 5, 10 ve 15 dakika, 1, 2, 4 ve 6 saat ara ile çalistirilmasini saglar.

  • Her dakika */1
  • Her saat */1
  • İki dakikada */2
  • Iki saatte */2
  • Beş dakikada */5
  • Dört saatte */4
  • On dakikada */10
  • Altı saatte */6
  • Onbeş dakikada */15

Cronjobsta UNIX komutlarının dışında PHP ve MySQL komutlarini da kullanabilmek için gerekli kodların yazılı olduğu dosyanın GET methodu ile çagrılmasi yeterli olur.

crontab ile çalıştırılan programların çıktılarını denetlemek için örnekler;

örnek 1:

örnek 2:

örnek 3:

örnek 4:

örnek 1 deki çıktı STDOUT(standart output) da olur. crontab da Mailto belirlenmiş ise, bu çıktı eğer mailserver kurulu ise belirtilmiş emailadresine gönderilir.

örnek 2 deki çıktı STDOUT yerine /var/log/omer.log dosyasına yazılır.

örnek 3 normalde STDOUT gösterilecek çıktıların çöpe atılmasını sağlar ( yani /dev/null sistemin çöplüğüdür de denebilir).

örnek 4 hem STDOUT daki hem de STDERR(standart error) deki çıktıların çöpe atılmasını sağlar.

 

NOT:UNIX/Linux sistemlerinde bir proses yaratıldığında üç dosya betimleyicisi üst prosesten aktarılmaktadır. Bunlar stdin, stdout ve stderr dosyalarına ilişkin betimleyicilerdir. stdin standart giriş (standard input) dosyasıdır ve default olarak okuma amacıyla terminale (yani kalvyeye) yönlendirilmiş durumdadır.

stdout standart çıkış (standard output) dosyasıdır ve default olarak yazma amaçlı terminale (yani ekrana) yönlendirilmiş durumdadır.

stderr ise programda oluşacak hata mesajlarının yazdırılması için kullanılan standart hata (standard error) dosyasıdır. Bu dosya da işin başında default olarak ekrana yönlendirilmiştir.

stdin, stdout ve stderr dosyalarını programcı açmaz. Bu dosyalar proses çalışmaya başladığında zaten açık olarak üst prosesten aktarılmıştır. Programcının bu dosyaları kapatmasına gerek de yoktur. Proses sonlandığında zaten kapatma işlemi yapılacaktır.

 


So, what do you think ?

You must be logged in to post a comment.