Cron, Linux sunucularda belirli zamanlarda komut çalıştıran zamanlayıcıdır. Her gece yedek almak, her saat önbelleği temizlemek, her beş dakikada bir WordPress'in bekleyen işlerini tetiklemek ya da ayda bir eski kayıtları silmek gibi tekrarlayan işler cron ile yapılır. Paylaşımlı barındırma paketlerinde buna panelden erişirsiniz; komut satırı bilmeniz gerekmez, ama zamanlama sözdizimini ve birkaç temel kuralı bilmek gerekir. Bu yazı sözdizimini bir tabloyla açıklar, üç yaygın panelde görev ekleme akışını anlatır, WordPress'in kendi zamanlayıcısını gerçek cron'a nasıl bağlayacağınızı gösterir, yedek ve temizlik örnekleri verir ve paylaşımlı paketlerdeki sınırlara dikkat çeker.
Zamanlama sözdizimi
Bir cron satırı beş zaman alanı ve ardından çalıştırılacak komuttan oluşur. Alanlar soldan sağa dakika, saat, ayın günü, ay ve haftanın günüdür; her alan sayı, yıldız ya da aralık alır.
| Alan | Değer aralığı | Örnek | Anlamı |
|---|
| Dakika | 0–59 | 30 | Saatin 30. dakikası |
| Saat | 0–23 | 3 | Gece 03:00 |
| Ayın günü | 1–31 | 1 | Her ayın ilk günü |
| Ay | 1–12 | 6 | Haziran |
| Haftanın günü | 0–7 (0 ve 7 Pazar) | 1 | Pazartesi |
Özel karakterler:
her değer anlamına gelir: saat alanında “her saat” demektir.*/5 “her beşte bir” demektir: dakika alanında her beş dakikada bir.1,15 virgülle ayrılmış liste: ayın 1'i ve 15'i.9-17 aralık: 9'dan 17'ye kadar her saat.
Birkaç hazır örnek:
/15 * her 15 dakikada bir.0 her saat başı.30 3 * her gece 03:30'da.0 4 0 her Pazar 04:00'te.0 2 1 her ayın 1'inde 02:00'de.
Sunucunun saat dilimine dikkat edin: panelde gördüğünüz saat sunucunun yerel saatidir ve Türkiye'den farklı olabilir. Panelin cron ekranında saat dilimi seçeneği varsa kendi diliminizi seçin; yoksa firmaya sunucunun hangi dilimde çalıştığını sorun.
Ayın günü ile haftanın günü alanlarını birlikte doldurursanız iki koşul “ya da” ile birleşir: 0 5 1 * 1 satırı hem her ayın 1'inde hem de her Pazartesi çalışır, yalnızca Pazartesi'ye denk gelen ayın 1'inde değil. Bu, yeni başlayanları sık şaşırtan bir kuraldır; iki alanı birlikte kullanmak yerine birini yıldız bırakın.
Panelde görev ekleme
Üç yaygın panelde akış aynıdır: görev ekranını açın, zamanlamayı seçin, komutu yazın, kaydedin.
- cPanel: Gelişmiş bölümündeki cron görevleri ekranında hazır zamanlama seçenekleri (her dakika, her saat, her gün, haftada bir) ve beş alanı elle doldurabileceğiniz kutular vardır. Üst kısımdaki e-posta alanına bir adres yazarsanız her çalışmanın çıktısı oraya gider.
- Plesk: Zamanlanmış görevler bölümü görev türünü sorar: bir komut çalıştır, bir PHP betiğini çalıştır ya da bir URL'yi çağır. PHP betiği seçeneği, dosya yolunu ve PHP sürümünü seçtirir; komut satırı bilmeyenler için en kolay yoldur.
- DirectAdmin: Gelişmiş özellikler bölümündeki cron görevleri ekranı beş alanı ve komutu ister; çıktının gideceği e-posta adresi aynı ekranda tanımlanır.
Komut yazarken iki tür vardır. Bir PHP dosyasını doğrudan çalıştırmak için PHP yorumlayıcısının tam yolu ve dosyanın tam yolu gerekir, örneğin /usr/local/bin/php /home/kullanici/public_html/betik.php. Yol paketten pakete değişir; panelin cron ekranı çoğunlukla doğru PHP yolunu örnek olarak gösterir, göstermiyorsa firmaya sorun. Bir web adresini çağırmak için wget -q -O /dev/null "https://ornek.com/betik.php" ya da curl -s "https://ornek.com/betik.php" > /dev/null kullanılır; betik web üzerinden erişilebilir olduğundan onu bir anahtar parametresiyle korumak gerekir.
WordPress wp-cron'u gerçek cron'a bağlamak
WordPress'in kendi zamanlayıcısı (wp-cron.php) gerçek bir cron değildir: zamanlanmış yazı yayınlama, güncelleme kontrolü ve eklenti işleri yalnızca siteye bir ziyaretçi geldiğinde tetiklenir. Az ziyaretli sitede işler gecikir; çok ziyaretli sitede ise tetikleme sayfa isteklerine bağlı kaldığı için gereksiz istek yükü ve önbellekli sayfalarda düzensiz zamanlama görülebilir. Çözüm iki adımdır:
- wp-config.php dosyasına
define('DISABLE_WP_CRON', true); satırını ekleyin; WordPress artık ziyaretçi başına tetikleme yapmaz. - Panelde beş ya da on dakikada bir çalışan bir görev ekleyin:
wget -q -O /dev/null "https://ornek.com/wp-cron.php?doing_wp_cron" ya da doğrudan /usr/local/bin/php /home/kullanici/public_html/wp-cron.php.
Bu değişiklikten sonra zamanlanmış yazılar ziyaretçiye bağlı kalmadan, en fazla cron aralığı kadar gecikmeyle yayınlanır, yedek eklentileri belirlenen saatte çalışır ve sayfa yüklemeleri hafifler. WooCommerce gibi sık görev üreten eklentiler için bu ayar özellikle önemlidir.
Yedek ve temizlik örnekleri
Veritabanı kopyası: Her gece 03:00'te veritabanını sıkıştırılmış dosyaya yazmak için 0 3 * mysqldump -u kullanici -p'parola' veritabani | gzip > /home/kullanici/yedek/db-$(date +\%F).sql.gz. Cron satırında yüzde işareti özel anlam taşıdığından ters eğik çizgiyle kaçırılır. Parolayı komuta yazmak yerine ana dizinde bir .my.cnf dosyasında tutmak daha güvenlidir. Kopya klasörü web kökünün dışında olmalıdır; public_html içine alınan yedek herkesin indirebileceği bir dosyadır.
Eski kopyaları silmek: 0 4 find /home/kullanici/yedek -name ".sql.gz" -mtime +14 -delete on dört günden eski arşivleri temizler ve kotanın dolmasını önler. Kopyaların sunucu dışına nasıl taşınacağı hosting yedekleme rehberi yazısında anlatılıyor.
Dosya kopyası: Her Pazar 04:30'da 30 4 0 tar -czf /home/kullanici/yedek/site-$(date +\%F).tar.gz /home/kullanici/public_html web kökünü arşivler. Büyük sitelerde bu işlem paylaşımlı paketin işlemci sınırına takılabilir; medya klasörünü ayrı arşivlemek ya da rsync ile yalnızca değişenleri eşitlemek daha hafiftir.
Önbellek ve geçici dosya temizliği: Uygulamanın geçici klasöründeki eski dosyaları find ... -mtime +7 -delete ile silmek, inode sınırına dayanmış hesaplarda rahatlama sağlar. WP-CLI kurulu paketlerde wp cache flush ve wp transient delete --expired komutları da cron'a bağlanabilir.
Paylaşımlı paketlerde sıklık sınırları
Cron görevleri sunucu kaynağı tüketir ve paylaşımlı sunucuda bu kaynak ortaktır. Bu nedenle firmalar sıklığa sınır koyabilir: dakikada bir çalışan görevlere izin verilmeyebilir, en düşük aralık paket ya da panel ayarında belirtilir, çok uzun süren görevler sonlandırılabilir. Bu sınırlar paket sayfasında her zaman yazmaz; görev eklemeden önce firmanın yardım belgelerine bakın ya da destek ekibine sorun. Sınırların altında kalmak için üç ilke yeterlidir: görevi gerçekten gereken en seyrek aralığa ayarlayın, ağır işleri (tam yedek, büyük temizlik) gece saatlerine koyun ve birden fazla görevi aynı dakikaya denk getirmeyin. Görevin çalışma süresi düzenli olarak birkaç dakikayı aşıyorsa paylaşımlı paket bu iş için küçük gelmiş demektir; bir üst paket ya da VPS gündeme gelir.
Görev çalışmıyorsa ya da beklenmedik sonuç veriyorsa
- Göreli yol kullanmak: cron, sizin oturumunuzdaki dizinden değil, hesabın ana dizininden çalışır; her dosya için tam yol yazın.
- PHP yolunu yanlış yazmak; panelin örnek gösterdiği yolu kullanın.
- Çıktı e-postasını açık bırakıp her beş dakikada bir bildirim almak; başarılı çalışmalarda çıktıyı
> /dev/null 2>&1 ile susturun, ama hata ayıklarken bir süre açık tutun. - Yüzde işaretini kaçırmamak; satır beklenmedik yerde kesilir.
- Yedeği web kökünün içine yazmak.
- Görevin bittiğini kontrol etmemek; ilk birkaç çalışmayı günlük dosyasından ya da sonuç dosyasının tarihinden doğrulayın.
- wp-cron'u kapatıp gerçek cron'u eklemeyi unutmak; zamanlanmış yazılar yayınlanmaz.
Görevlerin dakikada bir ve sınırsız çalışması gerekiyorsa ya da uzun süren işler varsa kendi sunucunuz daha uygundur (cron'un en küçük birimi dakikadır; saniye düzeyinde zamanlama için VPS'te systemd zamanlayıcıları gibi araçlar kullanılır); VPS sunucu firmaları ve bulut sunucu sayfalarında yönetilen paketleri karşılaştırabilirsiniz. Paylaşımlı pakette cron desteği ve sınırları paylaşımlı hosting firmaları listesinden açacağınız firma sayfalarındaki paket kartlarında çoğunlukla yazmaz; satın almadan önce firmaya sorun.