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.
[[email protected]~]$cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
İ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.
30 18 * * * rm /home/kullanıcıadı/tmp/*
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;
[[email protected]~]./betik.sh > /dev/null 2>&1
Ü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.
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.