crontab -e, Linux ve Unix sistemlerinde kişisel zamanlanmış görev tablosunu güvenli şekilde düzenlemenin standart yoludur. Dosyayı doğrudan /var/spool altında açmak yerine bu komut geçici kopya oluşturur, editör açar, sözdizimini kontrol eder ve cron daemon'a yeni tabloyu yükletir.
Bu rehberde editör seçimi, adım adım görev ekleme, gerçek hata mesajları, yedekleme ve başka kullanıcı adına düzenleme yer alır. Beş alanlı zaman ifadelerinin anlamı için crontab sözdizimi; örnek satırlar için crontab örnekleri rehberlerine bakın. Resmi özet: crontab(1) man sayfası.
SSH erişiminiz yoksa veya yalnızca bir URL'yi periyodik çağırmanız gerekiyorsa sunucu crontab'ı yerine cronjob.com.tr HTTP zamanlayıcısı kullanılabilir; bu sayfanın sonunda kısaca anlatılır.
macOS'ta da crontab -e kullanılabilir; ancak betiğin eriştiği dosyalar ve sistem izinleri Linux sunucudan farklıdır. macOS cron ve launchd kurulum ayrıntıları, görevi crontab'da tutmak ile bir LaunchAgent'a taşımak arasındaki seçimi değerlendirmenize yardımcı olur.
crontab -e Ne Yapar?
Komut çalıştırıldığında sırayla şunlar olur:
- Mevcut kullanıcı crontab'ının geçici bir kopyası oluşturulur (yoksa boş şablon).
VISUALveyaEDITORortam değişkenindeki (yoksa sistem varsayılanı) editör açılır.- Kaydedip çıktığınızda crontab sözdizimi doğrulanır.
- Hata yoksa tablo kurulur; genelde
crontab: installing new crontabmesajı görünür. - Cron daemon bir sonraki dakikadan itibaren yeni satırları kullanır.
crontab -e
İlgili komutlar: listelemek için crontab -l; silmek için crontab -r (bazı sürümlerde onay için -i); dosyadan yüklemek için crontab dosya.txt.
İlk Kullanım ve Editör Seçimi
Debian/Ubuntu'da ilk çağrıda editör menüsü çıkabilir:
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
Yeni başlayanlar için nano yeterlidir. Sonradan değiştirmek:
select-editor
export EDITOR=nano
export VISUAL=nano
echo 'export EDITOR=nano' >> ~/.bashrc
source ~/.bashrc
Adım Adım Cron Görevi Ekleme
- Yedek alın:
crontab -l > ~/crontab-yedek-$(date +%Y%m%d).txt(tablo yoksa hata normaldir). crontab -eile editörü açın.- Dosyanın sonuna gidin (nano: Ctrl+End; vim:
G). - Yorum satırı ve görev satırını ekleyin; satırın sonunda newline olsun.
- Kaydedip çıkın (nano: Ctrl+O, Enter, Ctrl+X; vim: Esc,
:wq). crontab -lile satırın göründüğünü doğrulayın.
# Her gün 03:00 veritabanı yedeği
0 3 * * * /home/kullanici/scripts/yedek.sh >> /var/log/yedek.log 2>&1
Başarılı kurulumda tipik çıktı:
crontab: installing new crontab
İfadeyi görsel olarak üretmek için cron ifade oluşturucu kullanabilirsiniz; sonra satırı crontab'a yapıştırın.
Gerçek Senaryolar
Senaryo 1: Gece yedek + log
Her gece 03:15'te yedek script'i çalışır; stdout/stderr aynı loga yazılır. PATH dar olduğu için script içinde mutlak yollar kullanın.
15 3 * * * /usr/bin/bash /home/kullanici/scripts/yedek.sh >> /home/kullanici/logs/yedek.log 2>&1
Senaryo 2: URL sağlık kontrolü (5 dakika)
Uygulama bir HTTP endpoint sunuyorsa curl ile kontrol edilebilir. Çıktıyı loglamak, sessiz 404/timeout'ları yakalar.
*/5 * * * * /usr/bin/curl -fsS -o /dev/null -w "\%{http_code}\n" https://ornek.com/health >> /var/log/health-cron.log 2>&1
Başka Kullanıcının Crontab'ı
Root yetkisiyle web veya veritabanı kullanıcısı adına düzenleme:
sudo crontab -u www-data -e
sudo crontab -u postgres -l
Kullanıcı crontab satırında kullanıcı adı alanı yoktur. /etc/crontab formatını buraya kopyalamayın. Web uygulaması dosyalarına www-data (veya hosting panelindeki eşdeğer kullanıcı) yazıyorsa görevi o kullanıcının tablosuna koymak izin hatalarını azaltır. Tersine, yalnızca root'un okuyabildiği yedek dizinleri için root crontab gerekir; gereksiz yere root ile çalıştırmayın.
Paylaşımlı hosting'de crontab -u genelde kapalıdır; panelin "Cron Jobs" arayüzü aynı kullanıcı tablosuna yazar. Panel ile crontab -e aynı tabloyu paylaşır; birinde sildiğiniz satır diğerinde de kaybolur.
Sık Hatalar ve Çözümleri
errors in crontab file, can't install
Neden: Geçersiz dakika/saat, fazla alan veya bozuk satır. Önceki tablo yerinde kalır. Çözüm: y ile editöre dönün; satırı beş alan + komut olacak şekilde düzeltin. Debian'da satır numarası bazen hatalı satırın bir üstünü gösterir.
crontab: installing new crontab
"/tmp/crontab.XXXXXX/crontab":10: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
bad minute / bad hour
Neden: Dakika alanı 0–59 veya saat alanı 0–23 aralığının dışındadır. Çözüm: Kullanıcı crontab'ında tam olarak beş zaman alanı kullanın.
Komut hiç çalışmıyor, kurulum mesajı geldi
Neden: Son satırda newline eksik (klasik Vixie cron tuzağı); göreli yol; veya dar PATH. Çözüm: Dosya sonunda boş satır bırakın; /usr/bin/php gibi mutlak yollar yazın; >> /tmp/cron-test.log 2>&1 ile loglayın.
permission denied veya script çalışmıyor
Neden: Çalıştırma izni yok veya yanlış kullanıcı. Çözüm: chmod +x script.sh; görevi dosya sahibinin crontab'ına koyun. Ayrıntı: Permission denied.
you are not allowed to use this program (crontab)
Neden: Kullanıcı /etc/cron.deny listesinde veya cron.allow dışındadır. Çözüm: Sistem yöneticisinden allow listesine eklenmesini isteyin.
İyi Alışkanlıklar
Crontab düzenlemesi nadiren yapılır; bu yüzden okunabilirlik, yedek ve gözlemlenebilirlik sonradan sorun çıkmasını engeller. Özellikle birden fazla kişinin aynı sunucuya dokunduğu ortamlarda yorum satırı ve tarihli yedek dosyası standart olmalıdır.
- Her görevin üstüne ne yaptığını yazan
#yorum satırı koyun. - Düzenlemeden önce
crontab -lyedeği alın. - Çıktıyı
>> dosya.log 2>&1ile yönlendirin; mail flood'u kesmek için gerekirse> /dev/nullkullanın. - Ortam değişkenlerini crontab başında tanımlayın:
SHELL=/bin/bash,PATH=/usr/bin:/bin,MAILTO="". - Uzun komutları tek satırda sıkıştırmak yerine küçük bir sarmalayıcı script yazın; crontab satırı yalnızca script yolunu çağırsın.
- Aynı işi iki kullanıcı crontab'ına koymayın; çift çalışma veri bozulmasına yol açabilir.
Bazı dağıtımlarda crontab -T dosya.txt sözdizimini kurmadan test eder. Destekleniyorsa yedek dosyanızı önce bu bayrakla doğrulayıp sonra crontab dosya.txt ile yükleyin. Desteklenmiyorsa staging sunucuda veya geçici dakikalık satırla canlı doğrulama yapın.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=""
# Log temizliği — her Pazar 00:00
0 0 * * 0 /home/kullanici/scripts/log-temizle.sh >> /var/log/log-temizle.log 2>&1
cronjob.com.tr ile Alternatif
crontab -e sunucu içinde komut çalıştırır. İşiniz herkese açık bir HTTPS URL'yi çağırmaksa (sağlık kontrolü, webhook, wp-cron.php) panelden zamanlayabilirsiniz:
- Ücretsiz kayıt (kredi kartı yok).
- URL, HTTP metodu, isteğe bağlı header (ör.
X-Cron-Token) ve zamanlama girin. - En kısa aralık 60 saniye; başarı HTTP 200–399; loglar yaklaşık 7 gün; ardışık hatalarda e-posta.
Yerel script, veritabanı dump veya localhost servisleri dış zamanlayıcıya uymaz; bunlar için sunucu içi bir zamanlayıcı gerekir.
Sıkça Sorulan Sorular (SSS)
crontab -e ile eklediğim görev hemen çalışır mı?
Hayır. Kayıt anında cron daemon yeni tabloyu yükler; komut yalnızca beş alanlı zaman ifadesi eşleştiğinde çalışır. Test için geçici olarak her dakika (* * * * *) satırı kullanıp sonra aralığı düzeltin.
crontab -e dosyası nereye kaydediliyor?
Kullanıcı crontab dosyaları Debian/Ubuntu'da /var/spool/cron/crontabs/, RHEL/CentOS'ta genelde /var/spool/cron/ altındadır. Bu dosyaları doğrudan düzenlemeyin; her zaman crontab -e veya crontab dosya yolu kullanın.
crontab -e ile eklediklerimi nasıl geri alabilirim?
Yerleşik geri alma yoktur. Düzenlemeden önce crontab -l > yedek.txt alın. Geri yüklemek için crontab yedek.txt yazın. Tüm tabloyu silmek için crontab -r (destekleyen sürümlerde onay için -i) kullanın.
crontab -e ile /etc/crontab aynı mıdır?
Hayır. crontab -e kullanıcı tablosudur; satırda kullanıcı adı alanı yoktur. /etc/crontab ve /etc/cron.d dosyalarında zaman alanlarından sonra kullanıcı adı gerekir. Yanlışlıkla kullanıcı adını kullanıcı crontab'ına yazarsanız komut bulunamadı hatası alırsınız.
Sonuç
crontab -e zamanlanmış görev yönetiminin temel aracıdır. Yedek alın, mutlak yol ve log kullanın, sözdizimi uyarısını yok saymayın. Tabloyu anlamak için crontab nedir rehberine geçebilirsiniz.
Hemen Ücretsiz Cron Job Oluşturun
Sunucu crontab'ı olmadan HTTPS URL zamanlamak için cronjob.com.tr. Ücretsiz; kayıtta kredi kartı istenmez.
Ücretsiz Başla →