Web projelerinde otomatik e-posta gönderimleri, veritabanı yedeklemeleri, önbellek temizliği veya periyodik veri senkronizasyonu gibi işlemlerin belirli zaman aralıklarıyla arka planda çalışması gerekir. Bu tür tekrarlayan görevleri otomatikleştirmek için Linux sistemlerde Cron Job (Zamanlanmış Görev) yapısı kullanılır.
Bu rehberde, Linux VDS ve cPanel sunucularınızda Cron Job mantığını, crontab kullanımını ve zamanlama parametrelerini tüm detaylarıyla inceliyoruz.
1. Cron Job ve Crontab Nedir?
Cron: Linux/UNIX işletim sistemlerinde arka planda çalışan ve belirlenen komutları belirli zaman periyotlarında otomatik olarak tetikleyen zamanlama servisidir (daemon).
Crontab (Cron Table): Hangi görevin, ne zaman ve hangi sıklıkla çalışacağını belirten komutların tutulduğu yapılandırma dosyasıdır.
Crontab Erişim Yetkileri ve Sınırlamalar
Sunucu üzerinde kullanıcıların Cron Job oluşturabilmesi belirli erişim dosyalarıyla kontrol edilebilir:
/etc/cron.allowdosyası mevcutsa, yalnızca bu dosyada kullanıcı adı yazılı olan kişilercrontaboluşturabilir./etc/cron.denydosyası mevcutsa ve içerisinde kullanıcı adınız yer alıyorsa Cron Job kullanamazsınız.Dosya bulunmaması durumunda varsayılan olarak tüm kullanıcılar yetkili olabilir veya yalnızca
rootkullanıcısı işlem yapabilir.
2. Temel Crontab Komutları
SSH (Terminal) bağlantısı üzerinden crontab dosyanızı yönetmek için aşağıdaki temel komutları kullanabilirsiniz:
| Komut | Açıklama |
crontab -e | Mevcut kullanıcının crontab dosyasını düzenler (yoksa oluşturur). |
crontab -l | Tanımlanmış olan tüm Cron Job görevlerini listeler. |
crontab -r | Mevcut kullanıcının tüm crontab dosyasını siler. |
crontab -v | Crontab dosyasının en son ne zaman düzenlendiğini gösterir (bazı sistemlerde desteklenir). |
3. Crontab Sözdizimi (Syntax) ve Zamanlama Yapısı
Crontab dosyasındaki her bir satır 5 adet zaman parametresi ve ardından çalıştırılacak komuttan oluşur:
* * * * * /calistirilacak/komutun/yolu
│ │ │ │ │
│ │ │ │ └───── Haftanın Günü (0 - 6) (Pazar = 0 veya 7)
│ │ │ └──────── Ay (1 - 12)
│ │ └────────── Ayın Günü (1 - 31)
│ └──────────── Saat (0 - 23)
└────────────── Dakika (0 - 59)
Zamanlama Karakterlerinin Anlamları
*(Joker/Wildcard): İlgili alanın kapsadığı tüm değerleri ifade eder (örn. saat kısmında*her saat demektir).,(Virgül): Birden fazla spesifik zaman değeri belirtmek için kullanılır (örn.1,15,30).-(Tire): Bir değer aralığı tanımlar (örn.1-5hafta içi günleri temsil eder).*/n(Bölü): Belirtilennsıklığında tekrarlanmayı sağlar (örn.*/15her 15 dakikada bir).
4. Örnek Crontab Kullanımları
Pek çok senaryoda ihtiyaç duyabileceğiniz pratik zamanlama örnekleri aşağıdadır:
# Her gün gece yarısı (00:00) geçici dosyaları temizler
0 0 * * * rm -rf /home/kullanici/tmp/*
# Her 15 dakikada bir PHP betiğini çalıştırır
*/15 * * * * /usr/bin/php /home/kullanici/public_html/cron.php
# Her ayın 1, 10 ve 20. günlerinde saat 03:30'da çalışır
30 3 1,10,20 * * /home/kullanici/scripts/backup.sh
# Hafta içi her gün (Pazartesi-Cuma) akşam 20:00'de tetiklenir
0 20 * * 1-5 /usr/bin/php /home/kullanici/public_html/daily-report.php
5. Çıktı Yönetimi: E-posta İptali ve Log Tutma
Cron servisleri varsayılan olarak çalıştırılan her görev sonrası sistem kullanıcısına yerel e-posta/bildirim gönderir. Bu durumun önüne geçmek veya çıktıları bir log dosyasına kaydetmek için şu yöntemler kullanılır:
Bildirim E-postalarını Kapatmak
Komutun sonuna >/dev/null 2>&1 ifadesini ekleyerek tüm standart çıktı ve hata mesajlarını sessize alabilirsiniz:
0 2 * * * /usr/bin/php /home/kullanici/public_html/task.php >/dev/null 2>&1
Çıktıları Log Dosyasına Yazdırmak
Görevin çalışma geçmişini ve olası hataları takip etmek için çıktıyı bir log dosyasına yönlendirebilirsiniz:
0 2 * * * /usr/bin/php /home/kullanici/public_html/task.php > /home/kullanici/logs/cron_output.log 2>&1
6. cPanel Üzerinden Cron Job Ekleme (DoğruHost Kontrol Paneli)
Komut satırı kullanmak istemiyorsanız, DoğruHost cPanel arayüzü üzerinden görsel olarak kolayca Cron Job oluşturabilirsiniz:
cPanel'e Giriş Yapın: cPanel hesabınıza giriş yaptıktan sonra Gelişmiş (Advanced) başlığı altındaki Cron İşleri (Cron Jobs) simgesine tıklayın.
E-posta Ayarı: Görev çalıştığında bildirim almak istiyorsanız üst kısımdaki e-posta adresini güncelleyin (istemiyorsanız boş bırakabilir veya yukarıdaki
>/dev/nullyöntemini kullanabilirsiniz).Zamanlama Seçimi:
Ortak Ayarlar (Common Settings): Açılır menüden "Her 5 dakikada bir", "Günde bir kez" gibi hazır şablonlardan birini seçebilirsiniz.
Özel Zamanlama: Dakika, saat, gün, ay ve hafta günü alanlarını manuel olarak doldurabilirsiniz.
Komut Satırı (Command): Çalıştırılacak komutu yazın.
Doğrudan PHP çalıştırmak için:
/usr/bin/php /home/kullaniciadi/public_html/cron.phpURL üzerinden tetiklemek için:
wget -q -O - [http://siteadi.com/cron.php](http://siteadi.com/cron.php) >/dev/null 2>&1
Yeni Cron İşi Ekle (Add New Cron Job) butonuna basarak işleminizi tamamlayın.
DoğruHost Sunucu Performansı İpucu: Sunucu kaynaklarınızı (CPU/RAM) verimli kullanmak adına yüksek işlem gerektiren cron görevlerini (örneğin tam site yedeği veya toplu e-posta gönderimi) ziyaretçi trafiğinin en düşük olduğu gece saatlerine (
02:00-05:00arası) zamanlamanız önerilir.
