WordPress, yazılım ve IT üzerine notlar
Anasayfa » Sunucu & Linux » Cron sözdizimi rehberi: Beş yıldızın anlamı ve cron görevlerinin neden çalışmadığı

Cron sözdizimi rehberi: Beş yıldızın anlamı ve cron görevlerinin neden çalışmadığı

İçindekiler
  1. Beş alan
  2. Örneklerle
  3. Crontab'ı düzenlemek
  4. "Terminalde çalışıyor, cron'da çalışmıyor"
  5. Teşhis: Çıktıyı yakalayın
  6. Aynı görevin üst üste binmesi

Cron, Linux'ta zamanlanmış görevlerin klasik aracıdır. Yedekler, rapor e-postaları, önbellek temizliği, WordPress görevleri... Hepsi genellikle tek bir satırla tanımlanır. Ama o satırdaki beş alan ilk bakışta şifre gibi görünür.

Beş alan

┌───────── dakika        (0–59)
│ ┌─────── saat          (0–23)
│ │ ┌───── ayın günü     (1–31)
│ │ │ ┌─── ay            (1–12)
│ │ │ │ ┌─ haftanın günü (0–7; 0 ve 7 = Pazar)
│ │ │ │ │
* * * * *  komut

Özel karakterler:

  • * → her değer
  • , → liste: 1,15 (1'inde ve 15'inde)
  • - → aralık: 1-5 (Pazartesi–Cuma)
  • / → adım: */10 (her 10 birimde bir)

Örneklerle

*/5 * * * *        Her 5 dakikada bir
0 * * * *          Her saat başı
30 2 * * *         Her gece 02:30'da
0 9 * * 1-5        Hafta içi her gün 09:00'da
0 0 1 * *          Her ayın 1'inde gece yarısı
15 4 * * 0         Her Pazar 04:15'te
0 */6 * * *        Her 6 saatte bir (00, 06, 12, 18)
0 8,12,18 * * *    Günde üç kez: 08:00, 12:00, 18:00

Kısaltmalar da kullanılabilir: @reboot (açılışta bir kez), @daily, @hourly, @weekly, @monthly.

Bir tuzak: Gün alanları

Ayın günü ve haftanın günü alanlarının ikisi de doluysa, cron bunları "ve" değil "veya" olarak yorumlar:

0 0 13 * 5    →  Her ayın 13'ünde VE her Cuma (yalnızca 13 Cuma değil!)

Bu davranışı bilmeyen pek çok kişi sürpriz yaşamıştır.

Crontab'ı düzenlemek

crontab -e          # kendi kullanıcınızın görevleri
crontab -l          # listele
crontab -u www -e   # başka bir kullanıcının görevleri (root olarak)

Sistem genelindeki görevler /etc/crontab dosyasında ve /etc/cron.d/ klasöründe durur. Bu dosyalarda dakika alanlarından sonra bir de kullanıcı adı alanı vardır. Kişisel crontab'ta bu alan yoktur. İkisini karıştırmak, görevin hiç çalışmamasına yol açar.

"Terminalde çalışıyor, cron'da çalışmıyor"

Cron hakkında en çok sorulan soru budur. Sebebi neredeyse her zaman aynıdır: Cron sizin oturum ortamınızı bilmez.

1. PATH çok kısıtlıdır. Cron genellikle yalnızca /usr/bin:/bin ile çalışır. /usr/local/bin/wp ya da bir sanal ortamdaki python bulunamaz. Çözüm: Komutlarda tam yol kullanın ya da crontab'ın başına PATH tanımlayın.

PATH=/usr/local/bin:/usr/bin:/bin

2. Çalışma dizini farklıdır. Cron görevi kullanıcının ev dizininde başlar. Betiğiniz göreli yollar kullanıyorsa önce cd yapın:

0 3 * * * cd /opt/rapor && ./olustur.sh

3. % işareti özeldir. Crontab'ta % yeni satır anlamına gelir. date +%F gibi komutlarda kaçırmanız gerekir:

0 2 * * * tar -czf /yedek/site-$(date +\%F).tar.gz /var/www

4. Ortam değişkenleri yoktur. .bashrc ya da .bash_profile dosyalarında tanımladığınız değişkenler cron'da yoktur. Gerekenleri betiğin içinde tanımlayın ya da bir dosyadan okuyun.

5. Betiğin çalıştırma izni yoktur. chmod +x betik.sh, ya da betiği bash betik.sh şeklinde çağırın.

Teşhis: Çıktıyı yakalayın

Cron, görevin çıktısını yerel e-postayla göndermeye çalışır; çoğu sunucuda bu e-postayı kimse okumaz. Çıktıyı bir dosyaya yönlendirin:

*/5 * * * * /opt/bot/kontrol.sh >> /var/log/kontrol.log 2>&1

2>&1 kısmı hata mesajlarının da aynı dosyaya yazılmasını sağlar. Sorunu gördüğünüz anda büyük ihtimalle command not found ya da Permission denied gibi açık bir mesajla karşılaşırsınız.

Cron'un görevi gerçekten tetikleyip tetiklemediğini de sistem günlüğünden görebilirsiniz:

grep CRON /var/log/cron         # RHEL / AlmaLinux
grep CRON /var/log/syslog       # Debian / Ubuntu
journalctl -u crond --since today

Aynı görevin üst üste binmesi

Her 5 dakikada çalışan bir görev bir gün 7 dakika sürerse, bir sonraki çalışma öncekinin üstüne biner. Veri bozulmasının sinsi sebeplerinden biridir. flock ile önleyin:

*/5 * * * * flock -n /tmp/senkron.lock /opt/senkron.sh

-n parametresi, kilit doluysa yeni çalışmanın beklemeden çıkmasını sağlar.

Cron, kırk yılı aşkın süredir aynı sözdizimiyle çalışıyor. Birkaç kuralını öğrendiğinizde, sunucudaki en güvenilir yardımcınız olur.

Tezcan Kabakçı
Hosting teknik destek uzmanı ve WordPress uzmanı. 2024'ten beri bir hosting şirketinde teknik destek bölümünde çalışıyor; WordPress, DNS ve e-posta sorunlarını her gün yakından görüyor. YouTube kanalı.
Bu yazı 3 Eylül 2026 tarihinde Sunucu & Linux kategorisinde yayınlandı.
Yeni yazılar e-postanıza gelsin

Ayda birkaç e-posta; istediğiniz an tek tıkla ayrılabilirsiniz.

Videolu anlatımlar YouTube'da
Sunucu ve WordPress sorunlarını kısa videolarla anlattığım kanala abone olabilirsiniz. ▶ Kanala abone ol

Yorumlar

Henüz yorum yok. İlk yorumu siz yazın.

Yorum yazın

Yorumlar onaylandıktan sonra yayımlanır. Bağlantı içeren yorumlar spam olarak değerlendirilebilir.