Blog’a Dön

Cron Nedir? Linux'ta Cron Job Nasıl Kurulur?

Cron nedir, nasıl kullanılır? Crontab söz dizimi, zamanlama örnekleri, yedek ve yeniden başlatma görevleri, sık hatalar, cron günlükleri ve systemd timer.

Nodesty Ekibi5 dk okumaSunucular
Koyu Nodesty arka planında Cron yazısı ile crontab, Schedules ve Logs ifadeleri

Cron, Linux sunucularda komutları ve betikleri belirli zamanlarda otomatik olarak çalıştıran zamanlayıcıdır. Her gece yedek almak, oyun sunucusunu her sabah yeniden başlatmak, eski günlük dosyalarını temizlemek ya da bir siteyi düzenli olarak kontrol etmek gibi işleri bir kez tanımlarsınız, cron gerisini halleder. Cron ile zamanlanan bu görevlere cron job denir.

Bu rehberde crontab söz dizimini, sık kullanılan zamanlama örneklerini, pratik görevleri, cron'un en çok can sıkan hatalarını ve alternatif olarak systemd timer'ı anlatıyoruz.

Crontab nasıl düzenlenir?

Her kullanıcının kendi görev listesi vardır ve buna crontab denir. Düzenlemek için:

crontab -e

İlk çalıştırmada bir metin düzenleyici seçmeniz istenir; nano en kolayıdır. Mevcut görevleri görmek için crontab -l kullanılır. Root yetkisi isteyen görevler için sudo crontab -e ile root'un crontab'ını düzenleyin.

Crontab söz dizimi

Her satır bir görevdir ve beş zaman alanı ile çalıştırılacak komuttan oluşur:

┌───────── 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
SembolAnlamıÖrnek
*Her değer* saat alanında: her saat
,Liste1,15 ayın 1'i ve 15'i
-Aralık1-5 pazartesiden cumaya
/Adım*/10 dakika alanında: her 10 dakikada

Sık kullanılan zamanlama örnekleri

ZamanlamaAnlamı
*/5 * * * *Her 5 dakikada bir
0 * * * *Her saat başı
30 3 * * *Her gün 03:30'da
0 6 * * 1Her pazartesi 06:00'da
0 0 1 * *Her ayın 1'inde gece yarısı
0 9-18 * * 1-5Hafta içi 09:00–18:00 arasında saat başı
@rebootSunucu her açıldığında bir kez
@dailyHer gün gece yarısı

Bir ifadenin ne zaman çalışacağından emin değilseniz crontab.guru gibi bir sitede ifadeyi yazıp anlamını görebilirsiniz.

Pratik cron görevleri

Her gece veritabanı yedeği:

0 4 * * * /root/yedekle.sh >> /var/log/yedekle.log 2>&1

Düzenli ve sunucudan bağımsız yedek almayı Sunucu yedekleme rehberimizde ayrıntılı anlattık.

Oyun sunucusunu her sabah yeniden başlatmak:

0 6 * * * systemctl restart minecraft

Uzun süre açık kalan bazı oyun sunucuları zamanla daha fazla bellek kullanır; oyuncuların en az olduğu saatte yapılan günlük bir yeniden başlatma bunu önler. Bu örnek, oyun sunucusunun minecraft adında bir systemd servisi olarak çalıştığını varsayar; root crontab'ına eklenmelidir.

Eski günlük dosyalarını temizlemek:

0 5 * * 0 find /var/www/site/logs -name "*.log" -mtime +14 -delete

Her pazar, 14 günden eski günlük dosyalarını siler.

Bir sitenin ayakta olduğunu kontrol etmek:

*/5 * * * * curl -fsS https://alanadiniz.com > /dev/null || echo "Site cevap vermiyor" >> /var/log/site-kontrol.log

Cron'un sık yapılan hataları

Cron görevleri terminalde çalışan aynı komutla aynı ortamda çalışmaz. Görevlerin çoğu şu sebeplerden sessizce başarısız olur:

  • PATH eksikliği: Cron çok kısa bir PATH ile çalışır; terminalde bulunan bir komut cron'da bulunamayabilir. Komutların tam yolunu yazın (which node size yolu gösterir) ya da crontab'ın en üstüne bir PATH= satırı ekleyin.
  • Göreli yollar: Cron görevleri kullanıcının ev klasöründe başlar. Betiklerde ve dosya adlarında her zaman /home/kullanici/betik.sh gibi tam yollar kullanın ya da komuttan önce cd /klasor && yazın.
  • % karakteri: Crontab'da % satır sonu anlamına gelir. date +%F gibi kullanımlarda \% şeklinde kaçış yapın.
  • Çalıştırma izni: Betiğin chmod +x ile çalıştırılabilir olduğundan ve ilk satırında #!/bin/bash gibi bir yorumlayıcı bulunduğundan emin olun.
  • Çıktının kaybolması: Görevin çıktısını ve hatalarını bir dosyaya yönlendirin (>> /var/log/gorev.log 2>&1). Aksi hâlde bir hata olduğunda nedenini göremezsiniz.
  • Saat dilimi: Cron sunucunun saat dilimini kullanır. timedatectl ile kontrol edin; UTC kullanan bir sunucuda görevler yerel saatinizden farklı bir saatte çalışır.
  • Üst üste binen çalışmalar: Uzun bir görev bir sonraki zamanına kadar bitmezse iki kopya aynı anda çalışabilir. Komutun başına flock -n /tmp/gorev.lock ekleyerek bunu önleyin.

Cron günlüklerini kontrol etmek

Bir görevin çalışıp çalışmadığını görmek için:

grep CRON /var/log/syslog

Ubuntu ve Debian'ın güncel sürümlerinde bu dosya yoksa journalctl -u cron, AlmaLinux'ta journalctl -u crond ya da /var/log/cron dosyasını kullanın. Günlük, görevin başladığını gösterir; görevin başarılı olup olmadığını ise yalnızca kendi yönlendirdiğiniz çıktı dosyasından anlayabilirsiniz.

Sistem genelinde cron dosyaları

Kullanıcı crontab'larının yanında sistem genelinde görevler için de klasörler vardır:

  • /etc/cron.d/: Paketlerin ve yöneticilerin ayrı dosyalar olarak eklediği görevler. Buradaki satırlarda zaman alanlarından sonra görevi çalıştıracak kullanıcı adı da yazılır.
  • /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/: İçine konan çalıştırılabilir betikler günde, haftada ya da ayda bir çalışır.

Örneğin Certbot'un SSL sertifikalarını yenileme görevi ve günlük dosyalarını döndüren logrotate bu klasörlerden ya da systemd timer'larından çalışır.

Alternatif: systemd timer

Güncel Linux dağıtımlarında systemd timer, cron'a güçlü bir alternatiftir. Görev bir servis dosyası, zamanlama bir timer dosyası olarak yazılır. Kurulumu cron'dan biraz daha uzundur, ama avantajları vardır:

  • Görevin çıktısı otomatik olarak journalctl günlüğüne düşer.
  • Persistent=true ayarıyla sunucu kapalıyken kaçırılan görevler açılışta çalıştırılır.
  • Bir görevin önceki çalışması bitmeden yenisi başlamaz.

systemctl list-timers komutuyla sunucunuzdaki bütün timer'ları ve bir sonraki çalışma zamanlarını görebilirsiniz. Basit görevler için cron hâlâ en hızlı çözümdür; hata ayıklamanın ve güvenilirliğin önemli olduğu görevlerde timer'ı tercih edebilirsiniz.

Nodesty'de zamanlanmış görevler

Nodesty AMD Ryzen 9 9950X VDS paketlerinde tam root erişimiyle cron ve systemd timer'ı dilediğiniz gibi kullanabilirsiniz; Linux komutlarına yeniyseniz Temel Linux komutları rehberimizle başlayın. Web hosting paketlerimizde ise SSH erişimi olmadan, cPanel ve DirectAdmin'in cron bölümünden zamanlanmış görevlerinizi oluşturabilirsiniz.

Sıkça Sorulan Sorular

Cron job çalışmıyor, neden?

En sık sebepler eksik PATH yüzünden komutun bulunamaması, göreli dosya yolları, betiğin çalıştırma izninin olmaması ve crontab içinde kaçışsız kullanılan % karakteridir. Görevin çıktısını bir dosyaya yönlendirip hata mesajını okumak sorunu çoğu zaman hemen gösterir.

Cron hangi saat dilimini kullanır?

Cron, sunucunun sistem saat dilimini kullanır. Birçok sunucu UTC ile çalışır; Türkiye saatiyle 03:00'te çalışmasını istediğiniz bir görev UTC'de 00:00'a denk gelir. timedatectl komutuyla sunucunun saat dilimini görebilir ve gerekirse değiştirebilirsiniz.

Cron ile her 30 saniyede bir görev çalıştırabilir miyim?

Cron'un en küçük birimi dakikadır. Daha sık çalıştırmanız gereken işler için ya görevi bir döngü içinde bekleyen bir servis olarak yazın ya da systemd timer kullanın. Saniyeler düzeyinde bir ihtiyacınız varsa çoğu zaman sürekli çalışan bir uygulama daha doğru çözümdür.

Web hostingde cron job kurabilir miyim?

Evet. cPanel'de Cron Jobs, DirectAdmin'de Cronjobs bölümünden SSH erişimine ihtiyaç duymadan zamanlanmış görev oluşturabilirsiniz. WordPress'in kendi zamanlayıcısı yerine gerçek bir cron görevi kullanmak, özellikle az ziyaret alan sitelerde zamanlanmış yazıların ve yedeklerin tam vaktinde çalışmasını sağlar.

Bir görevin aynı anda iki kez çalışmasını nasıl önlerim?

Uzun süren bir görev bir sonraki çalışma zamanına kadar bitmezse ikinci bir kopyası başlayabilir. Komutun başına flock -n /tmp/gorev.lock ekleyin; önceki çalışma sürerken yeni kopya hiç başlamaz.

Windows sunucuda cron var mı?

Windows'ta cron yoktur; aynı işi Görev Zamanlayıcı (Task Scheduler) yapar. Grafik arayüzünden ya da PowerShell'deki Register-ScheduledTask komutuyla belirli saatlerde ya da sunucu açılışında çalışacak görevler oluşturabilirsiniz.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································