crontab -l komutu, oturum açtığınız kullanıcının kayıtlı crontab içeriğini standart çıktıya yazar. Görevleri çalıştırmaz, düzenlemez veya silmez. Bir yedeklemenin nereden başlatıldığını bulmak, değişiklik öncesi mevcut düzeni kaydetmek ve yanlış kullanıcı hesabını kontrol etmek için ilk başvuracağınız komuttur.
Ancak bu çıktı sunucudaki bütün zamanlanmış işleri kapsamaz. Root kullanıcısının crontab'ı, sistem dosyaları ve systemd timer birimleri ayrı kaynaklardır. Bu rehberde kullanıcı görevlerini listeleyecek, sistem kaynaklarını ayıracak ve sağlam bir yedek alacaksınız. Temel kavramlar için crontab nedir rehberini okuyabilirsiniz; burada özellikle mevcut görevleri inceleme ve koruma akışına odaklanıyoruz.
crontab -l neyi gösterir, neyi göstermez?
Çıktıda yalnızca zamanlama satırları değil, yorumlar ve ortam değişkenleri de bulunabilir. MAILTO, PATH ve SHELL gibi ayarlar görevlerin davranışını etkiler; yedekleme sırasında bunları çıkarmayın. Boş görünen bir çıktı ile kullanıcı için hiç crontab bulunmaması aynı durum değildir. Komutun hata mesajını ve çıkış durumunu birlikte değerlendirin.
whoami
crontab -l
echo $?
Burada son komutu doğrudan crontab çağrısından sonra çalıştırın; araya başka komut girerse onun durumunu okursunuz. Sıfır başarılı çağrıyı, sıfır dışı değer hata durumunu gösterir. Hata, henüz kayıt bulunmamasından veya erişim sorunundan kaynaklanabilir. sudo crontab -l ise kendi hesabınızın yerine root görevlerini gösterir; iki çıktının farklı olması beklenir.
Listeleme, görevin son çalışmasının başarılı olduğunu kanıtlamaz. Komut yolu artık geçersiz olabilir veya cron servisi durmuş olabilir. Çıktıyı görev envanteri olarak kullanın; çalışma sonucunu uygulama logu ve servis kayıtlarıyla doğrulayın. Zaman alanlarını okumak için crontab sözdizimi açıklamasına başvurun.
Adım adım kendi görevlerinizi inceleme
- Kimliği doğrulayın: whoami çıktısının uygulamanın görev sahibiyle eşleştiğini kontrol edin. SSH hesabınız ile web uygulaması kullanıcısı aynı olmak zorunda değildir.
- Tam çıktıyı okuyun: Önce crontab -l komutunu filtresiz çalıştırın. Hata mesajı varsa onu kaydedin; boş görünümü hemen silinmiş görev olarak yorumlamayın.
- Satırı çözümleyin: İlk beş alanı zamanlama, kalan bölümü komut olarak okuyun. Kullanıcı crontab'ında araya kullanıcı adı eklenmez. Yolları ve çıktı yönlendirmesini kontrol edin.
- Hedef görevi bulun: Aşağıdaki filtreyle ilgili script adını arayın. Bu yalnızca görüntüyü daraltır; kayıtlı crontab üzerinde değişiklik yapmaz.
crontab -l | grep -nF 'backup.sh'
# Örnek kullanıcı crontab içeriği:
# 0 3 * * * /bin/sh /srv/app/backup.sh
grep -F aranan metni düzenli ifade olarak değil, olduğu gibi yorumlar. -n çıktıdaki satır numarasını ekler. Ancak boru hattının son durumu grep sonucudur; crontab hatasını yedekleme mantığında böyle bir filtreyle gizlemeyin. Filtreli çıktıdan görev sayısı üretirken ortam değişkenlerini görev sanmak da yaygın bir hatadır.
Bir satırın başında boşluklar ve ardından yorum işareti bulunabilir. Yalnızca ilk karakteri # olanları dışlamak bütün yorumları ayıklamaz. Denetim raporlarında tam içeriği tutmak, basit satır sayısından daha değerlidir. Düzenleme gerekiyorsa önce yedek alın, ardından crontab -e kullanımı rehberindeki akışı izleyin.
Başka kullanıcının crontab kaydını listeleme
Uygulama www-data, postgres veya ayrı bir servis hesabıyla çalışıyor olabilir. Yetkiniz varsa hedefi açıkça belirterek listeleyin. -u seçeneğinin kabul edilmesi için gerekli ayrıcalık gerekir; yalnızca kullanıcı adını bilmek erişim sağlamaz. Yetkili hesabınız yoksa sistem yöneticisinden ilgili kullanıcı için çıktı isteyin.
sudo crontab -u www-data -l
sudo crontab -u root -l
Servis hesabının interaktif oturum açamaması, crontab sahibi olamayacağı anlamına gelmez. Buna karşılık uygulamanın servis kullanıcısı altında çalışması da zamanlamanın mutlaka aynı hesapta tutulduğunu göstermez. Dağıtım veya kurulum aracı görevi /etc/cron.d içine koymuş olabilir. Spool dosyalarını elle düzenlemek yerine crontab aracını kullanın; depolama yolları uygulamaya göre değişebilir.
Sistem görevlerini ve timer birimlerini bulma
/etc/crontab ve /etc/cron.d/ dosyaları kullanıcı crontab'ından ayrıdır. Bu dosyalarda beş zaman alanından sonra kullanıcı adı gelir. Bunları kullanıcı crontab'ına olduğu gibi yüklemek, kullanıcı adının komut sanılmasına yol açar. Saatlik ve günlük dizinlerde ise çoğunlukla ayrı scriptler bulunur; çalıştırılma düzeni dağıtım yapılandırmasına bağlıdır.
sudo cat /etc/crontab
sudo ls -la /etc/cron.d
sudo ls -la /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
# systemd kullanan sunucularda:
systemctl list-timers --all
Bazı dizinlerin bulunmaması tek başına arıza değildir. Dosyaları okuyarak çağrılan scriptleri takip edin; yalnızca dosya adından çalıştığını varsaymayın. Timer birimleri crontab -l çıktısında görünmez. Konteyner içindeki veya başka sunucudaki zamanlayıcılar da bu envanterin dışındadır; aradığınız işin hangi ortamda yürüdüğünü ayrıca belirleyin.
Tarih damgalı yedek alma ve geri yükleme
Değişiklik öncesi alınan yedek yalnızca görev satırlarını değil, çalışma ortamını açıklayan ayarları da korumalıdır. Aşağıdaki tek satırı interaktif terminalde kullanabilirsiniz. Dizin özel izinlerle oluşturulur; saniye damgası ve süreç numarası dosya adı çakışması riskini azaltır. Listeleme başarısızsa dosya oluşabileceği için yalnızca başarı mesajı verilen dosyayı geçerli yedek kabul edin.
(umask 077; mkdir -p "$HOME/cron_backups" && backup_file="$HOME/cron_backups/crontab-$(date +%Y%m%d-%H%M%S)-$$.txt" && crontab -l > "$backup_file" && echo "Yedek hazır: $backup_file")
Bu komut normal terminal içindir; doğrudan crontab satırına taşınırsa yüzde işaretleri ayrıca kaçırılmalıdır. Önceden mevcut bir dizinin izinleri umask ile değişmez; dizinin yalnızca size açık olduğunu kontrol edin. Dosyada hassas URL veya kimlik bilgisi bulunabileceğinden yedeği herkese okunabilir web dizininde tutmayın.
# Dosya adını gerçekten oluşturulmuş yedekle değiştirin:
less "$HOME/cron_backups/crontab-20261015-090000-1234.txt"
# İnceleme ve mevcut durumun ayrıca yedeklenmesinden sonra:
crontab "$HOME/cron_backups/crontab-20261015-090000-1234.txt"
crontab -l
Dosyadan yükleme ekleme işlemi değildir: kullanıcının mevcut crontab içeriğini dosyanın tamamıyla değiştirir. Yanlışlıkla boş dosya yüklemek görevleri kaldırır. Başka sunucuya taşırken kullanıcıları, script yollarını, çalışma dizinini, saat dilimini ve bağımlılıkları doğrulayın. Son listeyi yedekle karşılaştırmak kurulumun yapıldığını gösterir; ilk gerçek çalışmanın sonucunu da izleyin.
Gerçek senaryolar: denetim raporu ve bakım öncesi kontrol
Yerel kullanıcıları tek raporda inceleme
İlk senaryoda sunucu devralırken yerel /etc/passwd kullanıcılarının crontab kayıtlarını raporlarsınız. Aşağıdaki scripti root olarak çalıştırın. Hataları gizlemediği için kaydı bulunmayan kullanıcı ile diğer sorunları raporda ayırt edebilirsiniz. LDAP gibi dış kaynaklardaki hesaplar yerel dosya taramasına dahil değildir.
#!/bin/sh
# Örneğin: sudo /bin/sh cron-audit.sh
while IFS=: read -r account rest; do
printf '\n=== %s ===\n' "$account"
crontab -u "$account" -l 2>&1 || printf 'Listeleme başarısız: %s\n' "$account"
done < /etc/passwd
for path in /etc/crontab /etc/cron.d/*; do
[ -f "$path" ] || continue
printf '\n=== %s ===\n' "$path"
cat "$path"
done
for folder in /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly; do
[ -d "$folder" ] || continue
ls -la "$folder"
done
Rapor scriptleri çalıştırmaz ve görevlerin başarılı olduğunu söylemez. Çıktıyı dosyaya kaydedecekseniz önce umask 077 uygulayın ve erişimi sınırlandırın. İkinci senaryoda her dağıtım öncesi tarih damgalı yedek alıp bakım sonrası crontab -l çıktısını karşılaştırırsınız. Böylece kurulum aracının başka bir görevi kaldırması hemen fark edilir; bu kontrolü yalnızca arıza çıktıktan sonra yapmak zorunda kalmazsınız.
Yanlışlıkla crontab -r çalıştırmaktan korunma
-l listeler; -r kullanıcı crontab'ının tamamını kaldırır. Bazı uygulamalarda varsayılan silme onaysızdır. Silme komutunu kopyalanacak olağan kullanım örneği gibi çalıştırmayın. Cronie gibi destekleyen uygulamalarda -i, -r işleminden önce interaktif onay ister; önce kendi sisteminizdeki man crontab belgesini kontrol edin.
# Yalnızca -i desteği olan sistemlerde, interaktif Bash için:
alias crontab='crontab -i'
Bu alias bir ek önlemdir; scriptleri, başka kabukları veya doğrudan program yoluyla çağrıları korumaz. Kalıcı eklemeden önce kullanılan crontab uygulamasının seçenekleriyle uyumunu doğrulayın. Düzenli yedek asıl kurtarma aracıdır. Silinen kayıt için taşınabilir bir geri alma komutu yoktur; yedek, yapılandırma deposu veya yönetim sistemi kaydı yoksa görevleri yeniden oluşturmanız gerekebilir. Seçenekler crontab kılavuzunda açıklanır.
Sık karşılaşılan hatalar ve çözümleri
no crontab for user
İlgili kullanıcı için kayıt bulunmayabilir. Önce whoami ve hedef kullanıcıyı doğrulayın; ardından sistem dosyalarını inceleyin. Yeni görev tanımlayacaksanız crontab -e kullanın; hatalı listeleme çıktısını geçerli yedek saymayın.
crontab: must be privileged to use -u
Hedef kullanıcıyı seçmek için yeterli ayrıcalık yoktur. Yetkiniz varsa sudo kullanın; yoksa yöneticiden yardım alın. Spool dosyalarının izinlerini açmak doğru çözüm değildir.
Root olarak listeledim, sistem görevleri görünmedi
Root kullanıcısının kişisel kaydı ile /etc/crontab farklıdır. Sistem dosyasını ve /etc/cron.d içeriğini ayrıca okuyun. systemd timer kullanılıyorsa ilgili birimleri de inceleyin.
Yedekten yükledim, diğer görevler kayboldu
crontab dosya komutu mevcut içeriği değiştirmiştir. İşlemden önce alınmış tam yedeği inceleyerek geri yükleyin. Birkaç satırlık dosyanın mevcut tabloya otomatik ekleneceğini varsaymayın.
Liste boş, fakat boru hattı başarılı görünüyor
Son çalışan filtre veya sayım komutunun çıkış durumu okunmuş olabilir. Teşhisi filtresiz crontab -l ile tekrarlayın; standart hata çıktısını gizlemeyin ve yedek başarısını doğrudan listeleme sonucuna bağlayın.
cronjob.com.tr ile HTTP tabanlı alternatif
crontab -l ile yerel görev envanteri çıkarma işlemi sunucuda yapılmalıdır. cronjob.com.tr sunucunuzun kullanıcı crontab kayıtlarını okuyamaz veya onları otomatik taşıyamaz. Ancak listedeki bir iş uygulamanızın HTTP uç noktasıyla yapılabiliyorsa onu ayrı bir HTTP görevi olarak zamanlayabilirsiniz.
Örneğin kendi geliştirdiğiniz https://example.com/api/reports/daily adresi POST isteğini ve gizli X-Maintenance-Token header değerini doğrulasın. Panelde URL, POST metodu, header ve 0 9 * * 1-5 zamanlamasını girin; işin saat dilimini seçin. Önce manuel çağrıyla sonucu doğrulayın, ardından yerel görevle çift çalışmayı önleyecek geçiş planını uygulayın.
Cron ifadeli işlerde bekleme sınırı 290 saniyedir. Bağlantı hatası yokken HTTP 200–399 başarı sayılır. Varsayılan üç ardışık hata eşiğinde erişim sorunu, düzelince düzelme e-postası gönderilir; aynı iş için bildirimler arasında en az altmış dakika vardır. Yerel script sonucu HTTP durumuna doğru yansıtılmalıdır; yalnızca isteğin kabul edilmesi işlemin tamamlandığı anlamına gelmez.
Sıkça Sorulan Sorular (SSS)
crontab -l çıktısını dosyaya nasıl kaydederim?
crontab -l > yedek.txt komutu çıktıyı kaydeder. Komutun başarılı olduğunu doğrulayın; yönlendirme, listeleme başarısız olsa da boş dosya oluşturabilir.
Başka kullanıcının görevlerini nasıl görürüm?
Gerekli yetkiniz varsa sudo crontab -u kullanici -l komutunu kullanın. Hedef kullanıcı adını sunucunuzdaki gerçek hesapla değiştirin.
crontab -l ve crontab -r arasındaki fark nedir?
-l mevcut kullanıcı tablosunu listeler; -r tablonun tamamını kaldırır. Silme işleminden önce doğrulanmış bir yedek bulunmalıdır.
Root crontab listesinde /etc/crontab neden görünmez?
Root kullanıcısının kişisel crontab kaydı ve sistemin /etc/crontab dosyası ayrı kaynaklardır; sistem dosyasını ayrıca inceleyin.
HTTP görevlerinizi zamanlayın
cronjob.com.tr ücretsizdir; kayıtta kredi kartı istenmez. HTTP üzerinden çalışan uygulama işlerinizi tanımlayabilirsiniz.
Ücretsiz Başla →