Cron job, Unix-like işletim sistemlerinde yer alan cron kullanılarak planlanmış işlerin çalıştırılmasını sağlayan işlemlerdir. Cron joblar sayesinde tekrarlı bir şekilde yapılan birçok işlemden kurtulunabilmektedir.
Bu yazıda bir cron job nasıl oluşturulur, nasıl kurulur ve nasıl takip edilir bundan bahsedeceğim! Hadi başlayalım!
Table of Contents
Cron Job Nasıl Çalışır?
Cron bir deamon programıdır. Bir cron dosyası temelinde bir text dosyasıdır ve çalıştırılacak olan komutu ve zaman aralığını içermektedir.
Crontab veya diğer adıyla cron table ise varsayılan olarak /etc/crontab da bulunmaktadır ve root seviyesinde erişim gerektirmektedir. Ancak user seviyesinde yönetimi de sağlanabilmektedir.
Cron Job Kısıtları Nelerdir?
- Joblar arasındaki en kısa süre 60 saniyedir. Bir job çalıştırıldıktan sonra, bir sonraki job için geçecek süre en az 60 saniye olmaktadır.
- Kaçırılmış bir job manual olarak resetlenir. Eğer kaçırılmış bir cron job var ise bunu manual olarak resetlemeniz gerekmektedir, sistem otomatik düzenleme ve çalıştırma yapmamaktadır.
Crash durumunda veya sistemin kapanması durumunda cron da planlanmış olan job çalışmayacaktır. Sistem tekrar açıldığında da kaçırılmış bir cron job kalmaktadır. Bunu çözmek için anacron kullanılır. Anacron, crondan farklı olarak haftalık ve aylık planlama yapmamaktadır. Gün içerisinde periyodik olarak çağrılacak job’ı çalıştırmaktadır. Bunun için özelleştirilmiş bir script eklenirse kaçırılmış bir job tekrardan sistem aktif olduğunda çalıştırılabilmektedir.
- Herhangi bir yeniden başlatma özelliği bulunmuyor. Cron sadece girilen sürede o programı çalıştırmaktadır, crash durumunda tekrardan çalıştırılmayacaktır. Bu yüzden her birisi birbirinden bağımsız durumlar için kullanılmalıdır.
- Environment değişkenleri yok. Crontab, bir programı çalıştırmak için gerekli olan environment değişkenlerini okuyamamaktadır.
Eğer tek seferlik bir job oluşturmak isteniyorsa at komutu kullanılabilmektedir.
Crontab Syntaxı
Cron job oluşturmadan önce cronların syntaxını öğrenmemiz gerekiyor. Cron syntaxı 5 alandan oluşmaktadır. Bunlar:
- Dakika: 0 ile 59 arasındaki değerleri almaktadır ve komutun çalışacağı saatin hangi dakikası olduğunu belirtir.
- Saat: 0 ile 23 arasındaki değerleri almaktadır. 24 saatlik gösterimde ayarlamalar yapılmaktadır. Komutun çalışacağı saati göstermektedir.
- Gün(Ay): 1 ile 31 arasında değer almaktadır. Ayın hangi gününde çalışacağını belirtmektedir.
- Ay: 1 ile 12 arasında değer almaktadır. Programın hangi ayda çalışacağını belirtmektedir.
- Gün(Hafta): 0 ile 6 arasında değer almaktadır. Ayın hangi gününde çalışacağını belirtmektedir.
Yukardaki alanlarda kullanılabilen operatörlerde bulunmaktadır. Bu operatörler:
- Asterisk(*): Her anlamına gelmektedir. Yazıldığı alanda her dakika, her saat, her gün şeklinde çalışma aralığını belirtmektedir.
- Comma(,): Birden fazla değer alması gerektiğinde kullanılır. Saat alanında 1,2 yazılırsa 1. ve 2. saatlerde çalışacak anlamına gelir.
- Hyphen(-): Bir aralık seçilmek istendiğinde kullanılır. Haftanın günlerinde 5-7 seçilirse, Cuma’dan Pazar’a kadar çalışacaktır.
- Separator(/): Değerleri bölmek için kullanılabilmektedir. Saat alanında */12 seçilirse 12 saatlik aralıkta komut çalıştırılacaktır.
Cron Job Örnekleri
İlk olarak örnek bir kod yazalım ve bununla beraber cron job’ın çalışıp çalışmadığını kontrol edelim.
<?php
$baseDir = dirname(__FILE__);
$file = $baseDir. "/"."cron.service.log";
$current= file_get_contents($file);
$current .= date("Y/m/d") . date("h:i:sa"). "\n";
file_put_contents($file, $current);
?>
Örnek kodumuzda, bir log dosyası oluşturmakta ve buraya cron jobın çalıştığı zamanını kaydetmekte. Daha sonrasında bunu crontab’a ekleyelim.
crontab -l # bunu kullanarak oluşturulmuş crontab file incelenebilir.
crontab -e
* * * * * /usr/bin/php /home/cron.php # bu sayede her dakika bu komut çalıştırılacaktır
bunu ekledikten sonra cron.service.log içerisindeki çıktımız aşağıdaki gibi görünecektir.
2025/03/0910:43:01am
2025/03/0910:44:01am
2025/03/0910:45:01am
2025/03/0910:46:01am
2025/03/0910:47:01am
2025/03/0910:48:01am
2025/03/0910:49:01am
2025/03/0910:50:01am
2025/03/0910:51:01am
2025/03/0910:52:01am
2025/03/0910:53:01am
2025/03/0910:54:01am
Eklenen bu cron job’ı iptal etmek için ise crontab -e ile eklediğimiz komut satırını silmemiz ve kaydetmemiz yeterli olacaktır.
Genel hatlarıyla cron joblar bu şekildeydi. Bir sonraki yazıda görüşmek üzere.