Şimdi yükleniyor

Cron İşleri Nedir? Nasıl Kurulur? Ayarları Nelerdir?

Cron İşleri Nedir? Nasıl Kurulur? Ayarları Nelerdir?

Günümüz dijital dünyasında, sunucu ve sistem yönetiminin temel taşlarından biri olan otomatik görevler, verimlilik ve süreklilik açısından hayati öneme sahiptir. Bu otomatik görevlerin başında ise UNIX tabanlı sistemlerde yaygın olarak kullanılan Cron işleri gelmektedir. Cron, belirli zaman aralıklarıyla, arka planda otomatik olarak komutları ve betikleri çalıştırmaya olanak tanıyan güçlü bir zamanlama aracıdır. Bu sayede, manuel müdahaleye gerek kalmadan düzenli bakım işlemleri, yedeklemeler, rapor oluşturma veya veri temizleme gibi birçok rutin görev kolayca otomatize edilebilir.

Crontab (Cron TABle) Nedir?

Cron’un kalbinde yatan yapı, Crontab olarak bilinir. Crontab, çalıştırılacak görevleri ve bu görevlerin ne zaman çalıştırılacağını belirten zamanlama bilgilerini içeren bir dosyadır. Her kullanıcı kendi Crontab dosyasına sahip olabilir ve bu dosya üzerinde tanımladığı görevler, kullanıcının yetkileri dahilinde arka planda işletilir. Bu mekanizma, sistem yöneticilerine ve geliştiricilere, tekrarlayan görevleri esnek ve güvenilir bir şekilde yönetme imkanı sunar.

Crontab Sınırlamaları

Crontab kullanımında bazı sistem düzeyinde sınırlamalar bulunabilir. Bir kullanıcının Crontab’ı kullanabilmesi için genellikle iki ana koşuldan biri sağlanmalıdır:

  • Kullanıcı adınız /usr/lib/cron/cron.allow dosyasında listelenmelidir. Eğer bu dosya mevcutsa, yalnızca içinde adı geçen kullanıcılar Crontab oluşturabilir veya düzenleyebilir.
  • Eğer cron.allow dosyası bulunmuyorsa, kullanıcı adınızın /usr/lib/cron/cron.deny dosyasında bulunmaması gerekir. Bu dosya, Crontab kullanımına izin verilmeyen kullanıcıları listeler.

Tüm sistem kullanıcılarının Crontab’ı kullanabilmesini sağlamak için /usr/lib/cron/cron.deny dosyasının mevcut olması ve içinin boş bırakılması gerekir. Eğer cron.deny dosyası yoksa ve cron.allow da yoksa, çoğu UNIX sisteminde Crontab’ı yalnızca root kullanıcısı kullanabilir. Bu izin mekanizmaları, sistem güvenliğini sağlamak ve yetkisiz görev zamanlamalarını engellemek amacıyla tasarlanmıştır.

Crontab Komutları

Crontab dosyalarını yönetmek için kullanılan temel komutlar şunlardır:

  • crontab -e: Bu komut, kullanıcının Crontab dosyasını düzenlemesini sağlar. Eğer Crontab dosyası yoksa, bu komut yeni bir dosya oluşturur. Düzenleme işlemi genellikle sistemin varsayılan metin düzenleyicisi (örneğin, vi veya nano) aracılığıyla yapılır.
  • crontab -l: Kullanıcının mevcut Crontab dosyasının içeriğini listeler ve ekrana yazdırır. Bu komut, mevcut zamanlanmış görevleri kontrol etmek için oldukça faydalıdır.
  • crontab -r: Kullanıcının Crontab dosyasını tamamen siler. Bu komutu kullanırken dikkatli olmak gerekir, çünkü silinen görevler geri getirilemez.
  • crontab -v: Crontab dosyasının en son ne zaman düzenlendiği hakkında bilgi verir. Bu, özellikle birden fazla kişinin aynı sunucuda çalıştığı ortamlarda değişiklikleri takip etmek için yararlı olabilir.

Crontab Dosyası Dizilimi

Bir Crontab dosyasındaki her satır, bir zamanlanmış görevi temsil eder ve belirli bir dizilime uyar. Bu dizilim, görevin ne zaman çalıştırılacağını belirleyen beş zaman alanını ve ardından çalıştırılacak komutu içerir:

* * * * * Çalistirilacak Komut
- - - - -
| | | | +—— haftanin günü (0 – 6) (Pazar=0)
| | | +—— ay (1 – 12)
| | +——— ayin günü (1 – 31)
| +———— saat (0 – 23)
+————— dakika (0 – 59)

Bu alanların her biri için özel karakterler kullanılabilir:

  • * (Yıldız): Bu karakter, ilgili alan için tüm olası değerleri temsil eder. Örneğin, saat alanında * kullanılması, görevin her saat çalıştırılacağı anlamına gelir.
  • , (Virgül): Birden fazla değeri ayırmak için kullanılır. Örneğin, dakika alanında 0,15,30,45 kullanılması, görevin her saatin 0, 15, 30 ve 45. dakikalarında çalışacağı anlamına gelir.
  • - (Tire): Bir değer aralığı belirtmek için kullanılır. Örneğin, saat alanında 9-17 kullanılması, görevin sabah 9’dan akşam 5’e kadar her saat çalışacağı anlamına gelir.
  • / (Bölü): Bir değeri belirli aralıklarla tekrarlamak için kullanılır. Örneğin, dakika alanında */15 kullanılması, görevin her 15 dakikada bir çalışacağı anlamına gelir.

Crontab Zaman Alanları ve Değer Aralıkları Tablosu

Aşağıdaki tablo, Crontab dizilimindeki her bir zaman alanının alabileceği değerleri özetlemektedir:

AlanAçıklamaDeğer AralığıÖzel Karakterler
DakikaGörevin çalışacağı dakika0-59*, ,, -, /
SaatGörevin çalışacağı saat0-23*, ,, -, /
Ayın GünüGörevin çalışacağı ayın günü1-31*, ,, -, /
AyGörevin çalışacağı ay1-12 (veya Jan-Dec)*, ,, -, /
Haftanın GünüGörevin çalışacağı haftanın günü0-6 (Pazar=0 veya Pazar=7, Pazartesi=1)*, ,, -, /

Örnek Crontab Girişleri

Crontab dizilimini daha iyi anlamak için bazı pratik örneklere göz atalım:

  • 30 18 * * * rm /home/kullaniciadi/tmp/*: Her gün saat 18:30’da /home/kullaniciadi/tmp/ klasöründeki tüm dosyaları siler.
  • 0 0 1 * * /usr/bin/backup_script.sh: Her ayın birinci günü gece yarısı (00:00) backup_script.sh adlı betiği çalıştırır.
  • 0 20 * 10 1-5 /usr/bin/mysqldump -u root -p password mydb > /var/backups/mydb_$(date +%Y%m%d).sql: Ekim ayının her Pazartesi ve Cuması saat 20:00’de bir MySQL veritabanı yedeği alır. Burada $(date +%Y%m%d) ifadesi, yedeğe dinamik bir tarih damgası ekler.
  • 30 0 1 1,6,12 * /usr/bin/php /var/www/html/cron/monthly_report.php: Ocak, Haziran ve Aralık aylarının birinci günü saat 00:30’da bir PHP betiğini çalıştırır.
  • 5,10 0 10 * 1 /usr/bin/wget -q -O - http://localhost/cron/check_service.php > /dev/null 2>&1: Her ayın 10. günü ve her Pazartesi, gece yarısı 00:05 ve 00:10’da bir PHP dosyasını web üzerinden çağırır ve çıktısını göz ardı eder.

Crontab Sabitleri (Ortam Değişkenleri)

Cron, görevleri çalıştırırken belirli ortam değişkenlerini kullanır. Bu değişkenler, görevin çalıştırılacağı kabuk ortamını tanımlar ve genellikle /usr/bin/sh kabuğu aracılığıyla yürütülür. Başlıca sabitler şunlardır:

  • HOME: Görevin çalıştırıldığı kullanıcının ev dizinini belirtir.
  • LOGNAME: Görevi çalıştıran kullanıcının giriş adını içerir.
  • PATH: Komutların aranacağı dizin yollarını tanımlar (genellikle /usr/bin:/usr/sbin:. gibi). Bu, Crontab’a tam yol belirtmeden komutları çalıştırmak için önemlidir.
  • SHELL: Görevleri çalıştıracak kabuğu belirtir (varsayılan olarak /usr/bin/sh).

Bu değişkenler, Crontab görevlerinde tam yol belirtmek zorunda kalmadan komutları çalıştırmak veya belirli dizinlerde işlem yapmak için kullanılabilir.

Email İptali

Cron, varsayılan olarak zamanlanmış bir görev her çalıştırıldığında veya bir hata oluştuğunda, görevi tanımlayan kullanıcıya bir e-posta gönderir. Bu, özellikle hata ayıklama ve görevlerin başarılı bir şekilde tamamlandığını doğrulamak için yararlı olsa da, çok sık çalışan görevler için gereksiz e-posta trafiği oluşturabilir. Eğer bu e-postaların gönderilmesini istemiyorsanız, cron görev satırının sonuna aşağıdaki ifadeyi ekleyebilirsiniz:

>/dev/null 2>&1

Bu ifade, komutun standart çıktısını (>/dev/null) ve hata çıktısını (2>&1) /dev/null‘a yönlendirir, yani çıktılar tamamen göz ardı edilir ve e-posta gönderilmez. Örnek:

30 18 * * * rm /home/kullaniciadi/tmp/* >/dev/null 2>&1

Log Dosyası Oluşturma

E-posta gönderimini iptal etmek yerine, cron görevlerinin çıktısını ve olası hatalarını bir günlük dosyasına kaydetmek, görevlerin takibi ve sorun giderme açısından çok daha faydalıdır. Bir görevin çıktısını bir log dosyasına yönlendirmek için aşağıdaki formatı kullanabilirsiniz:

30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log 2>&1

Bu örnekte, rm komutunun standart çıktısı /home/someuser/cronlogs/clean_tmp_dir.log dosyasına yazılır. 2>&1 ifadesi ise hata çıktısının da aynı dosyaya yönlendirilmesini sağlar. Bu sayede, görevlerin ne zaman çalıştığını, hangi çıktıları ürettiğini ve herhangi bir hata olup olmadığını kolayca kontrol edebilirsiniz.

Cpanel’de Cron İşleri

Sunucu yönetimi panelleri, özellikle cPanel gibi popüler olanlar, cron işlerini grafiksel bir arayüz üzerinden yönetmeyi oldukça kolaylaştırır. Bu paneller, UNIX komut satırına aşina olmayan kullanıcılar için büyük bir kolaylık sağlar ve cron işlerinin kurulumunu ve yönetimini basitleştirir. cPanel altında cron işi oluşturmak için genellikle iki farklı mod bulunur: Standart Mod ve Gelişmiş Mod (UNIX Tarzı).

Standart Mod

Standart mod, özellikle yeni başlayan veya komut satırı bilgisi sınırlı olan kullanıcılar için tasarlanmıştır. Bu mod, görev zamanlaması için açılır menüler ve basit form alanları sunarak, dakika, saat, ayın günü gibi zaman ayarlarının kolayca seçilmesini sağlar. cPanel’in standart modu genellikle 12 saatlik (AM/PM) formatı kullanır, bu da kullanıcıların alışkın olduğu zaman dilimlerinde seçim yapmasını kolaylaştırır.

Standart Mod ile Cron İşlemi Ekleme

Standart modda bir cron işi eklemek için izlenecek adımlar genellikle şunlardır:

  1. E-posta Adresi Girme: Formun en üst kısmında, cron işi çalıştığında veya bir hata oluştuğunda raporların gönderileceği bir e-posta adresi alanı bulunur. Bu alanı doldurmak, görevlerin durumunu takip etmek için önemlidir.
  2. Komut Girme: İkinci olarak, çalıştırılacak komutun girilmesi istenir. Buraya herhangi bir geçerli UNIX komutu yazılabilir. Örneğin, bir klasörün tüm içeriğini silmek için rm /home/kullaniciadi/tmp/* komutu kullanılabilir. Joker karakterler (*) burada da geçerlidir.
  3. Zamanlama Seçimi: Üçüncü adım, görevin ne zaman çalışacağını belirlemektir. cPanel, bu adım için genellikle dakika, saat, ayın günü, ay ve haftanın günü için ayrı ayrı açılır menüler sunar. Kullanıcılar, bu menülerden belirli değerleri veya “Her [dakika/saat/gün]” gibi seçenekleri seçebilirler.
  4. Kaydetme: Tüm ayarlar yapıldıktan sonra, genellikle “Cronjob Ekle” veya “Save Crontab” gibi bir düğmeye tıklayarak işlem tamamlanır.

Gelişmiş Mod (UNIX Tarzı)

Gelişmiş mod, UNIX komut satırı syntax’ına aşina olan deneyimli kullanıcılar için daha uygundur. Bu mod, standart Crontab dizilimini doğrudan girme imkanı sunar, bu da daha karmaşık veya özel zamanlama gereksinimleri olan görevler için esneklik sağlar.

Gelişmiş Mod ile Cron İşlemi Ekleme

Gelişmiş modda bir cron işi eklemek için adımlar şöyledir:

  1. E-posta Adresi: Raporların gönderileceği e-posta adresi ilk alana girilir.
  2. Zamanlama Dizilimi: Ardından, Crontab’ın beş zaman alanını (Dakika, Saat, Ayın Günü, Ay, Haftanın Günü) içeren UNIX tarzı dizilim doğrudan ilgili alanlara yazılır.
  3. Komut: Son olarak, çalıştırılması istenen komut “Command” veya “Komut” alanına girilir.
  4. Değişiklikleri Kaydetme: Tüm bilgiler girildikten sonra, genellikle “Commit Changes” veya “Değişiklikleri Kaydet” düğmesine tıklanarak görev oluşturulur.

Cron İşleri Hakkında İpuçları

Cron işlerini daha etkin kullanmak için bazı ek ipuçları ve bilgiler:

  1. Aralıklı Çalıştırma: Görevlerin belirli aralıklarla çalıştırılmasını sağlamak için */N syntax’ı oldukça kullanışlıdır. Örneğin, dakika alanında */5 kullanmak, görevin her 5 dakikada bir çalışacağı anlamına gelir. Benzer şekilde, */10 her 10 dakikada bir, */1 her dakika anlamına gelir. Saat, ayın günü gibi diğer alanlar için de bu yöntem geçerlidir.
  2. PHP ve MySQL Komutları: UNIX komutlarının yanı sıra, PHP ve MySQL gibi betik dillerini veya veritabanı işlemlerini de cron işleri aracılığıyla çalıştırabilirsiniz. PHP betiklerini çalıştırmak için genellikle php /path/to/script.php komutu kullanılır. Web tabanlı betikleri (HTTP üzerinden) çalıştırmak için ise wget veya curl gibi araçlar kullanılabilir: /usr/bin/wget -q -O /dev/null http://example.com/cron/script.php. MySQL komutları için ise mysql -u user -p'password' -e "SQL komutu;" database_name formatı kullanılabilir veya bir SQL dosyası mysql -u user -p'password' database_name < /path/to/script.sql şeklinde çalıştırılabilir.
  3. Ortam Değişkenleri: Crontab dosyasının en üstüne ortam değişkenlerini tanımlayarak, görevleriniz için özel bir ortam oluşturabilirsiniz. Örneğin, MAILTO="[email protected]" ekleyerek tüm cron çıktılarının belirli bir e-posta adresine gönderilmesini sağlayabilirsiniz.
  4. Hata Ayıklama: Bir cron işi beklendiği gibi çalışmıyorsa, öncelikle komutun tam yolunu belirttiğinizden ve gerekli izinlere sahip olduğundan emin olun. Komutu manuel olarak çalıştırarak çıktılarını kontrol etmek ve log dosyalarına yönlendirmek, sorun giderme sürecinde kritik öneme sahiptir.

Cron işleri, sunucu otomasyonunun temelini oluşturur ve doğru kullanıldığında sistem yönetimini büyük ölçüde kolaylaştırır. Belirli bir düzen içinde otomatikleşen görevler sayesinde, sistemler daha kararlı ve verimli çalışır, manuel hata olasılığı azalır ve yöneticilerin daha stratejik görevlere odaklanması sağlanır. Bu güçlü aracın sunduğu imkanları keşfetmek ve projelerinize entegre etmek, dijital altyapınızın performansını ve güvenilirliğini artırmanın anahtarıdır.

You May Have Missed