Crontab Nedir? Dosya, Komutlar ve Örnekler

RehberYayın: Güncellendi: 8 dk okumaHazırlayan: cronjob.com.tr Editörleri

Crontab, cron servisinin okuyacağı görev tablosunun ve bu tabloyu yöneten komutun adıdır. Bir kullanıcı için ne zaman hangi komutun çalışacağını saklar. Sunucuda görev eklemek, mevcut işleri görmek veya bir değişikliği geri almak istiyorsanız önce hangi hesabın tablosuyla çalıştığınızı bilmeniz gerekir.

Bu rehberde dosya konumlarını, crontab -e/-l/-r/-u kullanımını, editör seçimini ve yedekten dönüşü uygulayacaksınız. Örnekler Linux üzerindeki yaygın Debian cron ve Cronie kurulumlarına yöneliktir. Arka plan servisinin yönetimi için cron daemon rehberini, zaman ifadesinin ayrıntıları için crontab sözdizimi referansını kullanın. Buradaki öncelik doğru tabloyu güvenli biçimde yönetmektir.

Crontab dosyası nerede tutulur?

Kullanıcı tabloları dağıtıma göre farklı spool dizinlerinde saklanır. Spool, servisin yönettiği dosyaların tutulduğu alandır. Debian/Ubuntu düzeninde /var/spool/cron/crontabs, Cronie kullanılan RHEL ailesinde /var/spool/cron yaygın konumlardır. Dosya adı genellikle hesabın adıdır. Bu yolları bilmek teşhise yardımcı olur; dosyaları doğrudan düzenlemek için gerekçe değildir.

KonumİçerikYönetim
/var/spool/cron/crontabsDebian kullanıcı tablolarıcrontab komutu
/var/spool/cronCronie kullanıcı tablolarıcrontab komutu
/etc/crontabSistem görevleriYönetici tarafından dosya düzenleme
/etc/cron.dAyrı sistem görev tanımlarıYönetici tarafından dosya düzenleme

Spool dosyasını elle değiştirmek komutun yaptığı kurulum kontrollerini ve değişiklik bildirimini atlayabilir. Doğru dosya sahipliği de bozulabilir. Okumak için bile önce crontab -l kullanın. Bir hesabın tablosunun boş olması sistemde hiç görev olmadığı anlamına gelmez: sistem tanımları ve diğer kullanıcıların tabloları ayrıca bulunabilir.

Crontab komutları: -e, -l, -r ve -u

crontab -e mevcut hesabın tablosunu editörde açar; kaydedilen geçerli içerik kurulur. crontab -l mevcut tabloyu standart çıktıya yazar. crontab -r tek satırı değil, hesabın bütün tablosunu kaldırır. Bir görevi devre dışı bırakmak için editörde yalnızca o satırın başına yorum işareti koymanız çoğu durumda daha uygundur. Zaman alanlarını elle yazarken sık unutulan kalıpları crontab kopya kağıdı (cheatsheet) sayfasındaki hazır ifadelerle denetleyebilirsiniz.

# Kendi hesabınız
crontab -l
crontab -e
# Yönetici yetkisiyle belirli hesabı açıkça seçin
sudo crontab -u uygulama -l
sudo crontab -u uygulama -e

-u başka bir hesabı seçer; bunun için genellikle yönetici yetkisi gerekir. Örnekteki uygulama hesabının sunucunuzda bulunduğunu doğrulayın. Yalnızca sudo crontab -e çalıştırırsanız normal hesabın tablosunu değil root tablosunu düzenlersiniz. Terminalde hangi kullanıcıyla oturum açtığınızı hatırlamak yerine id çıktısını kontrol edin.

Dikkat: crontab -r onay istemeden bütün tabloyu kaldırabilir. Bazı uygulamalarda -i ile onay istenebilir; bunu yerel man sayfasından doğrulayın. Bu rehberde kaldırma komutunu deneme amacıyla çalıştırmayın.

crontab gorevler.txt dosyayı mevcut tabloya eklemez; onun yerine kurar. Standart girdiden kurulum için kullanılan crontab - da aynı değiştirme davranışına sahiptir. Yeni satır eklemek isterken yalnızca yeni satırı içeren bir dosyayı kurmak, eski görevleri kaybettirir. Dosyadan yüklemeden önce bütün tabloyu gözden geçirin.

Adım adım ilk tabloyu düzenleme ve EDITOR seçimi

  1. Hesabı doğrulayın. id ve crontab -l çalıştırın. no crontab for mesajı ilk kullanımda normal olabilir; izin hatasıyla karıştırmayın. Mevcut tablo varsa önce aşağıdaki yedekleme bölümünü uygulayın.
  2. Kurulu editörü seçin. VISUAL ve EDITOR değişkenlerini aynı programa ayarlamak seçim belirsizliğini azaltır. Aşağıdaki nano örneğini yalnızca nano kuruluysa kullanın; aksi halde mevcut editörün yolunu yazın.
  3. Zararsız deneme satırı ekleyin. Tarihi ev dizininizde bir dosyaya yazdıran örneği kaydedin. Nano kullanıyorsanız Ctrl+O ile yazın, Enter ile dosya adını onaylayın ve Ctrl+X ile çıkın.
  4. Kurulumu ve tetiklemeyi ayrı doğrulayın. crontab -l çıktısında satırı görün; sonraki dakika geçince deneme dosyasını okuyun. Sonra geçici satırı editörden kaldırıp tekrar kaydedin.
id
crontab -l
VISUAL=nano EDITOR=nano crontab -e
# Editöre eklenecek tek satır:
* * * * * /usr/bin/date >> "$HOME/crontab-deneme.log" 2>&1
# Editörden çıktıktan sonra terminalde:
crontab -l
tail "$HOME/crontab-deneme.log"

Değişkenleri komutun önüne yazmak bu editör seçimini o çağrı için uygular. Debian/Ubuntu üzerinde select-editor yardımcı aracı bulunabilir; başka sistemlerde var olduğunu varsaymayın. Kaydetmeden çıkış, yeni tablo kurulduğu anlamına gelmez. Ayrıntılı editör adımları için crontab -e kullanımını inceleyin.

Kullanıcı tablosu ile sistem crontab farkı

Kullanıcı tablosunda beş zaman alanını doğrudan komut izler. /etc/crontab ve desteklenen /etc/cron.d tanımlarında ise zaman alanları ile komut arasında kullanıcı adı vardır. Bu yüzden sistem tablosundan kopyaladığınız satırı kendi tablonuza olduğu gibi yapıştırmayın. Root kullanıcısının kişisel tablosu da kullanıcı biçimindedir; root olması ek alan gerektirmez.

# Kullanıcı tablosu: crontab -e
0 3 * * * /usr/local/bin/rapor-uret

# Sistem tablosu: /etc/crontab veya /etc/cron.d/rapor
0 3 * * * uygulama /usr/local/bin/rapor-uret

Buradaki kısa ifade her gün 03:00 anlamındadır; betik ve hesap önceden hazırlanmalıdır. /etc/crontab dosyasını crontab /etc/crontab komutuyla kullanıcı tablosuna yüklemeyin. Sistem dosyası zaten daemon tarafından ayrı okunur. /etc/cron.d dosyalarının /etc/crontab içindeki ortam atamalarını otomatik devraldığını da varsaymayın; gereken ayarları kendi tanımında belirtin.

Yedekleme ve geri yükleme

Yedek, hangi kullanıcıya ve sunucuya ait olduğu belli bir metin dosyası olmalıdır. Kullanıcıya özel erişim izinleriyle saklayın; komutlarda hassas yollar veya değerler bulunabilir. Aşağıdaki terminal komutlarında tarih dosya adının parçasıdır. Çıktı yönlendirmesi hedefi önce oluşturabileceği için crontab -l başarısız olduğunda kalan boş dosyayı geçerli yedek saymayın. Komutun çıktısını ve boş tablo mesajlarını yorumlamak için crontab -l komutu rehberindeki ayrıntılara bakabilirsiniz.

# Terminalde çalıştırın; mevcut crontab varsa
umask 077
yedek="$HOME/crontab-yedek-$(date +%Y%m%d-%H%M%S).txt"
if crontab -l > "$yedek"; then
    printf 'Yedek hazır: %s\n' "$yedek"
else
    printf 'Yedekleme başarısız; dosyayı geri yüklemeyin.\n' >&2
fi

Geri yüklemeden önce dosyayı okuyun, doğru hesaba ait olduğunu ve güncel görevleri içerdiğini doğrulayın. İşlem bütün tabloyu değiştireceği için mevcut durumun da ayrı yedeğini alın. Eski sunucudaki program yolları ve kullanıcı izinleri yeni sunucuda aynı olmayabilir; yalnızca zaman satırlarını taşımak yeterli değildir.

# Dosya adını gerçek, doğrulanmış yedeğinizle değiştirin
cat "$HOME/crontab-yedek-20261015-090000.txt"
crontab "$HOME/crontab-yedek-20261015-090000.txt"
crontab -l

Bu yedek yalnızca seçilen hesabın tablosudur; /etc/crontab ve /etc/cron.d içeriğini kapsamaz. Bazı Cronie sürümleri son tabloyu önbellekte saklayabilir ancak bütün dağıtımlarda böyle bir kurtarma garantisi yoktur. Kendi doğrulanmış yedeğinizi tutun. Aynı tabloyu iki yöneticinin eşzamanlı düzenlemesi son kaydın diğer değişikliği ezmesine yol açabilir; değişiklik penceresini koordine edin.

/etc/cron.allow ve cron.deny ile erişim

Bu dosyalar destekleyen uygulamalarda crontab komutunu kimlerin kullanabileceğini belirler. cron.allow mevcutsa hesap bu listede bulunmalıdır. O yokken cron.deny varsa listelenen hesaplara kullanım engellenir. Her satıra bir kullanıcı adı yazılır. Dosyaların ikisi de yoksa davranış uygulamaya ve yapılandırmaya göre değişir: Cronie belgesi yalnızca root erişimini, Debian belgesi yapılandırmaya bağlı davranışı açıklar.

Bu listeler bütün cron işlerinin yürütmesini durduran genel bir anahtar değildir. Cronie'de komut erişimi sonradan engellense bile kurulu tablo çalışmaya devam edebilir. Hesabın işlerini durdurmak istiyorsanız tabloyu ayrıca yönetin. PAM gibi ek erişim denetimleri de bulunabilir; izin sorunu yaşadığınızda yerel kuralları inceleyin. Cronie crontab belgesi ve Debian crontab belgesi arasındaki ayrımı dikkate alın.

İki gerçek kullanım senaryosu

Kişisel hesabın günlük disk raporu

Her gün 08:10'da disk kullanımını ev dizininizde saklamak, yönetici yetkisi gerektirmeyen bir izleme örneğidir. df komutu rapor üretir; eski çıktılara ekleyerek değişimi görebilirsiniz. Dosya büyümesini ayrıca yönetin. Terminalde df yolunu kontrol edin ve zamanın sunucunuzun saat dilimine göre değerlendirildiğini unutmayın.

10 8 * * * /bin/df -h >> "$HOME/disk-raporu.log" 2>&1

Uygulama hesabıyla haftalık rapor

Her pazartesi 07:20'de uygulama raporu üretecekseniz ilgili hesabın tablosunu yönetici olarak -u ile açın. Betiği önce aynı hesapla elle deneyin. Yazılacak dosyalar uygulama hesabına ait olmalıdır; sırf izin hatasını aşmak için görevi root tablosuna taşımayın. Bu yöntem uygulama dosyalarının yanlış sahiplikle oluşmasını da önler.

# sudo crontab -u uygulama -e ile açılan tabloya:
20 7 * * 1 /usr/local/bin/haftalik-rapor

Sık hatalar ve çözümleri

no crontab for kullanici

Seçilen hesabın kurulu tablosu yoktur. İlk kurulumda bu normaldir; -e ile oluşturabilirsiniz. Görevleri daha önce eklediyseniz root veya başka hesapla düzenlemiş olabilirsiniz. Doğru kullanıcıyı -u ile açıkça seçip tekrar listeleyin.

bad minute

Zaman alanı geçersizdir veya komut yanlışlıkla satırın başına taşınmıştır. Dakikanın ilk alan olduğunu ve 0–59 aralığını kontrol edin. Editörün gösterdiği satırı düzeltip yeniden kaydedin; yükleme reddedildiğinde yeni tablonun kurulduğunu varsaymayın.

new crontab file is missing newline before EOF

Son satırın sonunda satır sonu eksiktir. Özellikle betikle üretilen dosyalarda görülür. Dosyayı editörde açıp son satırdan sonra Enter ekleyin veya üretim kodunun sonuna satır sonu yazmasını sağlayın; ardından tekrar kurun.

You are not allowed to use this program (crontab)

İleti devamı uygulamaya göre değişebilir. cron.allow, cron.deny ve varsa PAM kuralları hesabın erişimini engelliyor olabilir. Yetkili yöneticiyle ilgili kuralı doğrulayın; spool izinlerini gevşeterek aşmaya çalışmayın.

/bin/sh: 1: root: not found

Sistem biçimindeki kullanıcı alanı kişisel tabloya kopyalanmış olabilir. Kabuk root sözcüğünü komut sanır. Kullanıcı tablosundan bu fazladan alanı çıkarın veya satırı doğru sistem dosyasında yönetin. Diğer çalışma sorunları için cron hata çözüm rehberine geçin.

cronjob.com.tr ile HTTP tabanlı alternatif

Uygulama işleminizi HTTPS üzerinden başlatabiliyorsanız sunucu crontab tablosunu yönetmeniz gerekmez. Örneğin https://example.com/tasks/haftalik-rapor uç noktasında POST isteğini kabul edin. Sunucu, X-Cron-Token header'ındaki gizli değeri doğrulamadan raporu başlatmamalıdır. Hatalı kimlik doğrulamada 401 veya 403 dönün; token'ı sorgu parametresine koymayın.

  1. Panelde URL, POST metodu ve X-Cron-Token özel header değerini girin.
  2. Pazartesi 07:20 için 20 7 * * 1 yazın ve saat dilimini seçin; varsayılan Europe/Istanbul değerini kontrol edin.
  3. Manuel çalıştırıp HTTP yanıtını ve rapor sonucunu inceleyin.

Cron ifadeli işlerde bekleme süresi 290 saniyedir. Hazır aralıklarda süre aralık eksi 5 saniyedir; en az 5, en fazla 290 saniye uygulanır: bir dakikalık aralıkta 55 saniye beklenir. Bağlantı hatası olmadan HTTP 200–399 başarılı sayılır. Ardışık hata eşiği varsayılan 3 olup 1–20 arasında ayarlanabilir; eşik aşılınca erişim sorunu, düzelince kesinti süresiyle düzeldi e-postası gelir. Aynı işte bildirimler arasında en az 60 dakika bulunur. Yalnızca yerel dosyalara erişen bir iş için sunucu tarafındaki crontab uygun kalır.

Sıkça Sorulan Sorular (SSS)

Crontab ile cron arasındaki fark nedir?

Cron görevleri başlatan arka plan servisidir. Crontab ise görev tablosunun ve bu tabloyu yöneten komutun adıdır.

sudo crontab -e hangi dosyayı düzenler?

Varsayılan sudo kullanımıyla root hesabının kişisel tablosunu düzenler. Başka hesap için -u ile kullanıcıyı açıkça belirtin; bu işlem /etc/crontab dosyasını düzenlemez.

Crontab dosyadan yüklenince mevcut satırlar korunur mu?

Hayır. Dosyadan yükleme mevcut kullanıcı tablosunun yerine geçer. Eski satırları korumak istiyorsanız önce yedekleyin ve yeni dosyaya dahil edin.

Tek bir görevi silmek için crontab -r kullanılır mı?

Hayır. -r bütün kullanıcı tablosunu kaldırır. Tek görev için -e ile yalnızca ilgili satırı kaldırın veya yorum haline getirin.

HTTP görevinizi panelden yönetin

cronjob.com.tr ücretsizdir ve kayıtta kredi kartı istemez. İşiniz HTTPS ile tetiklenebiliyorsa panelden zamanlayabilirsiniz.

Ücretsiz Başla →

İlgili Rehberler