UNIX sistemlerde "Cron" dediğimiz bir sistem vardır. Bu sistem, bir 'arka plan uygulaması/programı' veya 'background program' olarak geçer. Bu sistemin bir de bir tablosu vardır ve bu tabloya "Crontab (cron tables)" ismini veriyoruz. Burada cron, yapılacak olan işleri kapsarken crontab ise bu işlerin bir tablosunu tutar. Cron, her dakika çalışır ve bahsettiğimiz crontab'e bakar. Crontab içerisinde o an için yapılması gereken bir iş yoksa Cron, bir dakikalığına uyur ve bu döngü, yapılması gereken bir işin yapılacağı an gelene kadar devam eder.
Peki, bahsettiğimiz iş ne oluyor? Cron ve Crontab, istediğiniz günün istediğiniz dakikasında bir script, program veya komut çalıştırmanıza olanak tanıyor ve bunu bir döngü olarak sağlıyor. Örneğin 'her hafta cuma günü saat 17.00'da bunu yap.' şeklinde bir komut verebilirsiniz. Bir işi crontab tablosuna/takvimine tanımladığınızda bu iş, onun ne zaman yapılmasını istiyorsanız Cron tarafından o zaman yapılacaktır. Bahsettiğim bu tanımlamalar ilk önce size biraz karışık gelebilir ancak zamanla alışacaksınızdır. Her şeyden önce öğrenmemiz gereken bazı kavramlar var. Dolayısıyla 'man crontab' komutunu veriyorum.

Burada 4 opsiyon görüyoruz; bunları Türkçe'ye çevirelim.
crontab -l: Şu an mevcut olan crontab'ı size gösterecektir.
crontab -e: Mevcut crontab'ı düzenlemenize olanak tanır. Düzenlemeniz için varsayılan olarak 'nano' isimli metin düzenleyicide açılacaktır.
crontab -r: Bu komut, mevcut crontab'i silmenize olanak tanır.
crontab -i: Bu komut ise mevcut crontab'i silmeden önce size 'emin misin?' diye bir soru soracaktır; 'y' derseniz silecek, 'n' derseniz silmeyecektir. '-i' parametresi, '-r' parametresinden daha güvenlidir.
Daha fazlasını, 'man crontab' ve 'man cron' yazarak okuyabilir ve öğrenebilirsiniz. Bunları öğrendikten sonra önce 'crontab -e' komutunu verelim ve karşımıza nelerin çıkacağına bir bakalım.

Yukarıda gördüğünüz, nano metin editörüdür. En altta yeşil kutu içerisine aldığım kısımda metin kopyalamak, kesmek gibi işlevler mevcut. Bu noktada yeni bir metin dosyası oluşturup onu nano ile açtıktan sonra çeşitli denemelerde bulunabilirsiniz çünkü nano, yeni başlayanlar için pek de kullanışlı bir editör değildir. Burada, bir noktaya gidecekseniz farenizi değil, yön tuşlarını kullanmanız gerekir; farenizle yalnızca seçme işlemini yapabilirsiniz.
Nano'yu denediğinizi ve biraz da olsa alıştığınızı varsayarak devam ediyorum. Kırmızı kutuya baktığınızda 'm h dom mon dow command' şeklinde bir yorum satırı görüyorsunuz. Burada, yapılacak işleri tanımlarken dakika, saat, gün gibi parametreleri ait oldukları yerlere yerleştiriyoruz. Ancak bu kısaltmaların ne anlama geldiğini ve neyi nereye koyacağınızı bilemediyseniz aşağıda, sizin için hazırladığım görsele bakabilirsiniz. Lütfen dikkatli bir şekilde inceleyin.

Bu zaman dilimlerini tanımlarken boş geçmek istediğimiz kısma '*' işaretini koyuyoruz. Örneğin '1 saat aralıklarla yap' demek isterseniz 'command' haricindeki diğer alanları yıldız işareti ile boş geçebilirsiniz. Yıldız olarak bıraktığınız alanlar ise, 'sürekli' olarak işlenecektir. Yani örneğin dow kısmını yıldız olarak bırakırsanız o iş her gün yapılacaktır çünkü belli bir gün tanımlamamış oluyorsunuz. Bunun yanında zaten command kısmı, yapılacak işi tanımladığımız yer oluyor.
İsterseniz şunu kullanmayı deneyelim. Ben, her gün saat 13.33'te deneme.txt isimli bir dosya içerisine o günkü tarihi yazdırmak istiyorum. Aşağıdaki görsele bakmadan önce bunu kafanızda yapmaya çalışın.

Yukarıdaki gibi bir tanımlama sağlıyoruz. Burada, 'm' altına '33' ifadesini veriyoruz ve Cron'a '33. dakikada...' emrini veriyoruz. 'h' kısmına ise '13' ifadesini veriyoruz. Bu noktada söylediğimiz şey aslında 'saat 13.33'te yap.' şeklindedir. 13, kaçıncı saat olduğunu belirtirken 33, 13. saatin 33. dakikasında olduğunu belirtir.
Daha sona 'dom', 'mon' ve 'dow' kısımlarını yıldız ile boş geçiyoruz. Burada, herhangi bir bölüme herhangi bir tanımlama vermediğimiz için Cron, bu emri her gün gerçekleştirecektir. Örneğin eğer 'dom' kısmına 14 yazmış olsaydık sadece her ayın 14'ünde bu işlemi gerçekleştirecekti. Bunun yanında 'mon' kısmına 5 yazmış olsaydık sadece her sene beşinci ayda (Mayıs) bu işlemi gerçekleştirecekti.
En son kısım için; 'date >> /home/cyberworm/Desktop/deneme.txt' şeklinde bir komut vermişiz. 'date' komutu, şu anki tarihi bize verecektir; daha önceki bloglardan biliyorsunuzdur. Bununla beraber 'echo' ile kullandığımız iki adet büyüktür işaretini verip dosya ismini "lokasyonu ile birlikte" yazıyoruz.
Bu komutu verdikten sonra 'CTRL+X' kombinasyonu ile çıkış yapacağız ancak bu kombinasyonu yaptığımızda bize değişiklikleri kaydedip kaydetmeyeceğimizi soruyor:

Bu noktada klavyeden 'Y' tuşuna basmanız, ondan sonra da 'Enter' tuşuna basmanız gerekir; kaydolacaktır. Şu an yapmanız gereken tek şey, beklemek.

Saat 13.33 olur olmaz komutumuz gerçekleştirildi ve deneme.txt isimli dosyaya o günkü tarihi yazdırdı; Pazartesi Ekim 3 01:33:01 PM EDT 2022.
Bu noktada bilmeniz gereken çeşitli karakterler vardır. Bu karakterleri bilmeniz, Crontab'i daha efektif bir şekilde kullanmanız demektir. Bu karakterlerden biri, biraz önce bahsettiğimiz yıldız (*) karakteridir ve ne işe yaradığını zaten gördük.
Virgül (,): Bu, bir değer listesi belirtir. Örneğin siz, dow kısmı ile iş yapacaksınız ancak siz, işlemlerin sadece haftanın 1, 2, 4 ve 6. günleri için yapılmasını istiyorsunuz. Bunun için dow kısmına 1,2,4,6 yazmanız yeterli olacaktır:

Tire (-): Bu, belli bir aralığı temsil eder ve virgül karakterinin alternatifidir. Ancak burada, sıralı olaylardan bahsediyoruz. Örneğin her hafta 2, 3, 4, 5. günler için işlem yapacaksanız dow kısmına 2-5 yazmanız yeterli olacaktır. Bu kullanım (2-5), 2,3,4,5 kullanımına denktir.

Slash (/): Bir işlemin 2 dakikada bir yapılmasını istediğinizi varsayalım. Bunun için şu ana kadarki bilgileriniz ile şunu yazacaksınızdır: 0,2,4,6,8,10,12,14,16,18,20,22 * * * * /home/cyberworm/Desktop/deneme.txt
Ancak buna hiç gerek yoktur. Slash işareti, genellikle yıldız işareti ile birlikte kullanılır. Burada yapmamız gereken tek şey */2 yazmaktır. Ancak bunu, boşluk olmadan yazmanız gerekiyor çünkü bunlar bir bütün.

Bunun nasıl çalıştığını görmeniz açısından birkaç dakika bekledim ve aşağıdaki sonucu aldım.

Bu konuyu daha iyi anlamak ve daha kolay hareket etmeniz açısından konuyla alakalı bolca deneme yapmanızı, yapılmış örnekleri incelemenizi öneririm. Örnekler için Google'da 'crontab examples' tarzında bir arama yapmanız yeterli olacaktır.
Yayınlanma Tarihi: 2022-10-03 16:52:32
Son Düzenleme Tarihi: 2022-10-11 19:09:39