1. Anasayfa
  2. Blog
  3. Nedir

Cron Job Nedir, Nasıl Oluşturulur?

Cron Job Nedir, Nasıl Oluşturulur?

Cron job, Unix ve Linux tabanlı sistemlerde zamana dayalı görevleri otomatik olarak çalıştırmamızı sağlayan güçlü bir araçtır. Basit bir benzetmeyle açıklayalım: Cron job’ı, bilgisayarınıza kurduğunuz bir hatırlatıcı uygulaması gibi düşünebilirsiniz. Ancak bu hatırlatıcı sadece size bildirim göndermez, aynı zamanda belirlediğiniz zamanda istediğiniz işlemi otomatik olarak gerçekleştirir. Sistem yöneticileri, web geliştiricileri ve DevOps uzmanları için vazgeçilmez bir araç olan cron, sunucu yönetimini kolaylaştırır ve manuel müdahale ihtiyacını ortadan kaldırır.

Peki cron job’lar günlük hayatta nasıl kullanılıyor? Örneğin bir e-ticaret siteniz varsa, her gece stok durumunu kontrol eden, her sabah müşterilere kampanya e-postaları gönderen veya her hafta satış raporları hazırlayan otomatik süreçler kurabilirsiniz. WordPress kullanan bir blog sahibiyseniz, düzenli aralıklarla veritabanı optimizasyonu yapabilir, eski önbellek dosyalarını silebilir veya sitemap’inizi güncelleyebilirsiniz. Büyük bir sistem yönetiyorsanız, sunucu kaynaklarını izleyen, disk alanı dolduğunda uyarı gönderen veya log dosyalarını arşivleyen görevler tanımlayabilirsiniz.

Cron Job Nasıl Çalışır?

Cron Job Nasıl Çalışır?
  • Sistem açıldığında crond (cron daemon) adlı servis arka planda çalışmaya başlar. Bu servis, sistemde tanımlı tüm cron job’ları sürekli izler ve zamanı geldiğinde çalıştırır.
  • Crond, kullanıcıların crontab dosyalarını (/var/spool/cron/ dizininde) ve sistem genelindeki cron dosyalarını (/etc/crontab, /etc/cron.d/) okur ve bellekte tutar.
  • Her dakika crond, sistem saatini kontrol eder ve hangi job’ların çalıştırılması gerektiğine karar verir. Eşleşen zamanlama kuralları varsa ilgili komutları tetikler.
  • Belirlenen zamanda, cron belirlediğiniz komutu veya script’i çalıştırır. İşlem tamamlandığında çıktı ve hata mesajları belirttiğiniz yere gönderilir.

Cron tamamen sistem saatine bağlı olarak çalışır. Bu nedenle sunucunuzun saat ayarlarının doğru yapılandırılması ve saat diliminin (timezone) düzgün ayarlanması oldukça önemlidir. Sunucunuzun saati yanlışsa, cron job’larınız da yanlış zamanda çalışacaktır. Bir diğer önemli nokta ise cron’un çalıştırdığı komutların hangi kullanıcı yetkisiyle çalışacağıdır. Her crontab dosyası belirli bir kullanıcıya aittir ve o kullanıcının yetkileriyle çalışır. Root kullanıcısının crontab’ında tanımlı bir görev root yetkisiyle, normal bir kullanıcının crontab’ında tanımlı görev ise o kullanıcının yetkileriyle çalışır. Bu güvenlik açısından son derece önemlidir.

Cron ayrıca oldukça hafif bir servistir. Sistem kaynaklarını minimal düzeyde kullanır çünkü sürekli aktif olarak beklemek yerine, sadece belirli aralıklarla (genellikle her dakika) kontrol yapar. Bu özellik sayesinde yüzlerce cron job tanımlasanız bile sistem performansı olumsuz etkilenmez.

Cron Syntax: Zamanlama Kurallarını Anlamak

Cron job oluştururken en önemli ve belki de en kafa karıştırıcı kısım zamanlama syntax’ıdır. Bir cron ifadesi beş veya altı alandan oluşur ve her alan belirli bir zaman birimini temsil eder. Doğru zamanlama yapmak için bu syntax’ı iyi anlamak şarttır. Hadi adım adım inceleyelim.

Dakika (0-59)İlk alan dakikayı belirtir. 0 ile 59 arasında bir değer alır. Örneğin “30” yazdığınızda saatin 30. dakikasında çalışır.
Saat (0-23)İkinci alan saati belirtir. 24 saat formatında 0-23 arası değer alır. “14” yazdığınızda öğleden sonra 2’yi (14:00) ifade eder.
Ayın Günü (1-31)Üçüncü alan ayın kaçıncı günü çalışacağını belirtir. “15” yazarsanız her ayın 15’inde çalışır.
Ay (1-12)Dördüncü alan ayı belirtir. 1 Ocak, 12 Aralık’tır. İsterseniz kısaltma da kullanabilirsiniz: jan, feb, mar gibi.
Haftanın Günü (0-7)Beşinci alan haftanın gününü belirtir. 0 ve 7 Pazar’ı, 1 Pazartesi’yi temsil eder. sun, mon, tue gibi kısaltmalar da kullanılabilir.

Temel yapıyı öğrendiğimize göre, şimdi özel karakterlerin kullanımına bakalım. Cron syntax’ında bazı özel karakterler kullanarak çok daha esnek zamanlama kuralları oluşturabilirsiniz:

  • Yıldız (*): “Her” anlamına gelir. Dakika alanında * kullanırsanız “her dakika” demektir.
  • Virgül (,): Birden fazla değer belirtmek için kullanılır. “1,15,30” her ayın 1, 15 ve 30. günlerini ifade eder.
  • Tire (-): Aralık belirtmek için kullanılır. “1-5” haftanın 1. ile 5. günleri arası, yani Pazartesi-Cuma demektir.
  • Bölü (/): Belli aralıklarla tekrar için kullanılır. “*/5” dakika alanında her 5 dakikada bir anlamına gelir.
  • Soru işareti (?): Bazı cron versiyonlarında “belirtilmemiş” anlamında kullanılır.

Bu karakterleri birleştirerek karmaşık zamanlama kuralları oluşturabilirsiniz. Örneğin*/15 9-17 * * 1-5” ifadesi “Pazartesi-Cuma arası, saat 09:00-17:00 arasında her 15 dakikada bir” anlamına gelir. İlerleyen bölümlerde pratik örneklerle bu ifadeleri daha iyi kavrayacaksınız.

Cron Job Örnekleri: Gerçek Hayattan Kullanımlar

Teoriyi öğrendikten sonra en iyi öğrenme yöntemi pratik örnekler görmektir. Aşağıda en yaygın kullanılan cron job örneklerini ve açıklamalarını bulabilirsiniz. Her bir örneği kendi ihtiyaçlarınıza göre uyarlayabilirsiniz.

Cron İfadesiAçıklamaKullanım Alanı
0 2 * * *Her gece saat 02:00’da çalışırVeritabanı yedeği, log temizleme
*/5 * * * *Her 5 dakikada bir çalışırSistem izleme, sağlık kontrolü
0 9 * * 1Her Pazartesi sabah 09:00’daHaftalık rapor gönderimi
30 23 * * 0Her Pazar 23:30’da çalışırHaftalık bakım işlemleri
0 0 1 * *Her ayın ilk günü gece yarısıAylık faturalandırma, arşivleme
0 */4 * * *Her 4 saatte bir çalışırÖnbellek temizleme, senkronizasyon
0 8-18 * * 1-5Hafta içi her saat 08:00-18:00Çalışma saati içi kontroller
15 2 * * 6,0Hafta sonu 02:15’te çalışırHafta sonu özel işlemler

Şimdi de gerçek hayattan script örnekleri verelim. Bir WordPress sitesi yönetiyorsanız, aşağıdaki gibi bir yedekleme cron job’ı oluşturabilirsiniz:

0 3 * * * /usr/bin/php /var/www/html/wp-cron.php > /dev/null 2>&1
  • Bu komut her gece saat 03:00’te WordPress’in kendi cron sistemini tetikler. /dev/null 2>&1 kısmı ise çıktıyı ve hata mesajlarını yok sayar, böylece her çalıştırmada size e-posta gelmez.

E-ticaret siteniz için günlük raporlama scripti çalıştırmak istiyorsanız:

0 7 * * * /usr/local/bin/python3 /home/user/scripts/daily_sales_report.py
  • Bu job her sabah saat 07:00’da Python ile yazılmış satış raporu scriptini çalıştırır. Script tamamlandığında ilgili departmana e-posta gönderebilir veya bir dashboard’a veri aktarabilir.

Sistem log dosyalarını düzenli olarak temizlemek için:

0 0 * * 0 /usr/bin/find /var/log -name "*.log" -mtime +30 -delete
  • Bu komut her Pazar gece yarısı, 30 günden eski log dosyalarını otomatik olarak siler. Böylece disk alanınız dolmaz ve sistem performansı korunur.

Veritabanı optimizasyonu için MySQL kullanan bir örnek:

0 4 * * * /usr/bin/mysqlcheck -u root -p'parola' --optimize --all-databases
  • Her gece saat 04:00’te tüm veritabanlarınızı optimize eder. Ancak dikkat edin, parolayı crontab dosyasında saklamak güvenlik riski oluşturur. Daha güvenli yöntemleri ilerleyen bölümlerde göreceğiz.

Cron Job Oluşturma: Cron Job Nasıl Ayarlanır?

Artık cron job oluşturma zamanı geldi! Linux sistemlerde cron job oluşturmanın birkaç farklı yöntemi vardır. En yaygın ve kullanıcı dostu yöntem crontab komutunu kullanmaktır. İşte adım adım nasıl yapacağınız:

  1. Terminal’i Açın: SSH ile sunucunuza bağlanın veya yerel sisteminizde terminal açın. Cron job’ları komut satırından yöneteceksiniz.
  2. Crontab’ı Düzenleyin: crontab -e komutunu çalıştırın. İlk kullanımda editör seçimi isteyebilir. nano başlangıç için en kolaydır.
  3. Job’ı Ekleyin: Açılan editörde yeni bir satıra cron ifadenizi ve komutunuzu yazın. Zamanlama kuralını ve çalıştırılacak script’i belirtin.
  4. Kaydedin: Nano’da Ctrl+O ile kaydedin, Ctrl+X ile çıkın. Değişiklikler otomatik olarak aktif hale gelir, servis restart’a gerek yoktur.

💡 Pratik bir örnek üzerinden gidelim. Diyelim ki her gün saat 23:00’te bir yedekleme scripti çalıştırmak istiyorsunuz:

  1. Terminalde şu komutu yazın: crontab -e
  2. Açılan editörün en altına şu satırı ekleyin:
    0 23 * * * /home/kullanici/yedekleme.sh
  3. Nano kullanıyorsanız: Ctrl+O tuşlarına basıp Enter’a tıklayarak kaydedin, ardından Ctrl+X ile çıkın
  4. Kaydettiğinizi doğrulamak için: crontab -l komutunu çalıştırın ve eklediğiniz satırı görün

Mevcut cron job’larınızı listelemek için crontab -l komutunu kullanabilirsiniz. Tüm cron job’larınızı silmek isterseniz (dikkatli olun!) crontab -r komutunu kullanın. Başka bir kullanıcının crontab’ını düzenlemek için root yetkisiyle crontab -u kullaniciadi -e komutunu kullanabilirsiniz.

# Sistem Geneli Cron Job’lar

Kullanıcı bazlı crontab’ların yanı sıra sistem genelinde cron job’lar da oluşturabilirsiniz. Bunlar şu dizinlerde bulunur:

  • /etc/crontab – Ana sistem crontab dosyası
  • /etc/cron.d/ – Ek cron job dosyaları
  • /etc/cron.daily/ – Günlük çalışacak scriptler
  • /etc/cron.weekly/ – Haftalık scriptler
  • /etc/cron.monthly/ – Aylık scriptler

# cPanel ve Hosting Panelleri

Paylaşımlı hosting kullanıyorsanız SSH erişiminiz olmayabilir. Bu durumda cPanel, Plesk veya DirectAdmin gibi kontrol panellerini kullanabilirsiniz:

Cpanel’e giriş yaptığınızda Cronjobs kısmında cron job oluşturmak için 2 farklı mod görürsünüz:

  1. Standart Mod– Özellikle yeni kullanıcılar için önerilir. Bu seçenek gerekli ayarların formdan seçilebilmesini sağladığından işlemin daha hızlı ve basit yapılabilmesini sağlar. Standart mod 12 saatlik biçemi kullanır, böylece kullanıcının istediği zamanı seçmesini kolaylastırır (AM= 0-12, PM= 12-23)
    • Standart Mod ile Cronjob Ekleme: Standart modda kullanıcıdan işlemin yapılacağı zamanı seçmesi, rapor gönderilecek mail adresi ve yapılacak işlemi girmesi istenir. Formun en üstündeki alana işlem gerçekleştiğinde ya da bir hata olustuğunda rapor gelmesi istenen adres girilir. Ardından yapılacak işlemin girilmesi gerekir. Buraya tüm unix komutları girilebilir. Örneğin: Bir klasörün tüm içeriğini silmek için: rm home/kullaniciadi/tmp/* komutu kullanılabilir. Bu komutta da oldugu gibi “*” karakteri cron tarafindan da desteklenmektedir. Bu komut “*” /tmp klasöründeki tüm dosyalari temsil ettiginden /tmp klasörünün tüm içerik silinecektir. Daha sonra işlemin yapılacağı tarih seçilir. Son olarak Kaydet (Save Crontab)‘e tıklanarak işlem tamamlanır.
  2. Gelişmiş Mod (UNIX Style) – Gelismis mod UNIX tarzi cronjob eklemeyi destekler.Profesyoneller için önerilen moddur.
    • Gelişmiş Mod ile Cronjob Ekleme: İlk kısma rapor iletilecek mail adresi eklenir. Ardından çalıştırılma zamanı için sırasıyla Dakika, Saat, Ayın günü, Ay ve Haftanın günü yazilir. Son olarak “Command” kısmına çalıştırılması istenilen komut girilerek “Commit Changes” butonuna tıklanır.

Cron Job Çıktıları ve Hata Ayıklama

Cron job’larınızı oluşturdunuz ancak beklendiği gibi çalışmıyor mu? Sorun değil, bu çok yaygın bir durumdur. Cron job’ların en büyük zorluklarından biri, sessizce arka planda çalışmaları nedeniyle hata ayıklamanın zor olmasıdır. Bu bölümde, cron job çıktılarını nasıl yöneteceğinizi ve sorunları nasıl tespit edeceğinizi öğreneceksiniz.

E-posta ÇıktılarıLog DosyalarıSistem Logları
Varsayılan olarak cron, çalıştırdığı komutların çıktısını kullanıcıya e-posta olarak gönderir. Crontab dosyanızın başına MAILTO=sizin@email.com ekleyerek bu e-postaların nereye gideceğini belirleyebilirsiniz.Çıktıları bir log dosyasına yönlendirmek daha profesyonel bir yaklaşımdır: * * * * * /script.sh >> /var/log/cronjob.log 2>&1 Bu şekilde hem normal çıktı hem de hata mesajları dosyaya yazılır.Cron daemon’un kendisi de sistem loglarına yazdırır. /var/log/cron veya /var/log/syslog dosyalarını inceleyerek hangi job’ların ne zaman çalıştığını görebilirsiniz.

Hata ayıklama için bazı pratik ipuçları verelim. İlk olarak, cron job’ınızı manuel olarak çalıştırarak test edin. Crontab’a eklemeden önce, komutu terminalden direkt çalıştırın ve çalıştığından emin olun. Çalışıyorsa ancak cron’da sorun varsa, muhtemelen ortam değişkenleri eksiktir.

Ortam değişkenleri cron’un en yaygın sorun kaynaklarından biridir. Cron job’lar minimal bir ortamda çalışır ve normal terminal oturumunuzda olan birçok değişken (PATH, HOME, SHELL gibi) tanımlı olmayabilir. Bu sorunu çözmek için:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
HOME=/home/kullanici

0 2 * * * /home/kullanici/script.sh
  • Crontab dosyanızın başına gerekli ortam değişkenlerini ekleyerek sorunları çözebilirsiniz. Özellikle PATH değişkenini doğru ayarlamak çok önemli, çünkü script’inizdeki komutlar bulunamayabilir.

💡 Cron job’ınızın gerçekten çalışıp çalışmadığını test etmek için basit bir trick: Her dakika çalışacak şekilde ayarlayın ve çıktısını bir dosyaya yazdırın. * * * * * date >> /tmp/crontest.txt Bu komutu ekleyin, birkaç dakika bekleyin ve cat /tmp/crontest.txt ile dosyayı kontrol edin. Tarih ve saat bilgileri görüyorsanız, cron çalışıyor demektir.

💡 Yaygın hatalardan bazıları: Script dosyasının çalıştırma izni olmaması (chmod +x script.sh ile düzeltin), yanlış dosya yolları (mutlaka tam yol kullanın, göreceli yollar çalışmaz), karakter kodlama sorunları (özellikle Windows’ta oluşturulan scriptlerde) ve syntax hataları (cron expression’ınızı crontab.guru gibi sitelerde test edin).

Güvenlik ve En İyi Uygulamalar

Cron job’lar güçlü araçlardır ancak yanlış kullanıldığında ciddi güvenlik riskleri oluşturabilir. Sisteminizi korumak ve cron job’larınızın verimli çalışmasını sağlamak için bazı önemli güvenlik önlemleri ve en iyi uygulamaları bilmeniz gerekir. Profesyonel sistem yöneticilerinin uyguladığı prensipleri sizlerle paylaşalım.

  • Minimum Yetki Prensibi– Cron job’larınızı mümkün olan en düşük yetkili kullanıcıyla çalıştırın. Root yetkisiyle çalıştırmanız gerekmedikçe, normal bir kullanıcı hesabı kullanın. Bir güvenlik açığı durumunda sınırlı yetkiler hasarı minimize eder.
  • Script’leri Güvenli Tutun– Cron job’ların çalıştırdığı script dosyalarının izinlerini dikkatle ayarlayın. chmod 700 ile sadece sahibinin okuyup çalıştırabilmesini sağlayın. Script’lerinizi /home/kullanici/scripts/ gibi korumalı dizinlerde saklayın.
  • Hassas Bilgileri Koruyun– Veritabanı parolaları, API anahtarları gibi hassas bilgileri asla crontab dosyasına direkt yazmayın. Bunları ayrı dosyalarda saklayın ve script’inizde bu dosyalardan okuyun. Konfigürasyon dosyalarının izinlerini chmod 600 yapın.
  • Çıktıları Yönetin– Cron job çıktılarının birikmesine izin vermeyin. Log rotasyonu uygulayın veya eski logları düzenli olarak silin. Çok fazla log dosyası disk alanını doldurabilir ve sistem performansını düşürebilir.
  • Kaynak Tüketimini İzleyin– Cron job’larınızın ne kadar CPU, RAM ve disk I/O kullandığını izleyin. Kaynak yoğun job’ları sistem yoğunluğunun düşük olduğu saatlerde (genellikle gece) çalıştırın.
  • Çakışmaları Önleyin– Aynı job’ın birden fazla instance’ının aynı anda çalışmasını engellemek için lock mekanizmaları kullanın. Özellikle uzun süren job’larda bu kritiktir.

Lock mekanizması için basit bir örnek verelim. Flock komutunu kullanarak aynı script’in birden fazla kez çalışmasını engelleyebilirsiniz:

*/5 * * * * /usr/bin/flock -n /tmp/script.lock /home/user/script.sh
  • Bu komut, script çalışırken bir lock dosyası oluşturur. Eğer lock dosyası varsa (yani script hala çalışıyorsa), yeni çalıştırma denemesi reddedilir. Script tamamlandığında lock otomatik olarak kaldırılır.

# Hata Yönetimi ve Bildirimler

Cron job’larınızda hata yönetimi mutlaka olmalıdır. Script’lerinize exit kod kontrolü ekleyin ve hata durumunda bildirim alın:

#!/bin/bash
# Script'iniz
/yedekleme/scripti.sh

# Hata kontrolü
if [ $? -ne 0 ]; then
    echo "HATA: Yedekleme başarısız!" | \
    mail -s "Cron Job Hatası" admin@site.com
    exit 1
fi
  • Bu yaklaşım sayesinde kritik job’larda oluşan sorunları anında fark edersiniz. Ayrıca başarılı tamamlanma durumlarını da loglayabilir, monitoring sistemlerine entegre edebilirsiniz.

# Test Ortamı

Yeni cron job’larınızı önce test ortamında deneyin. Canlı sistemde beklenmedik sorunlar çıkmaması için:

  • Script’i manuel çalıştırın
  • Kısa aralıklarla test edin
  • Çıktıları ve logları inceleyin
  • Kaynak kullanımını ölçün
  • Başarılı testlerden sonra canlıya alın

Gelişmiş Cron Teknikleri ve Alternatifler

Temel cron kullanımını öğrendikten sonra, daha gelişmiş tekniklere ve modern alternatiflere göz atalım. Cron her ne kadar güçlü olsa da bazı durumlarda yetersiz kalabilir veya daha modern çözümlere ihtiyaç duyabilirsiniz. İşte profesyonel sistem yöneticilerinin kullandığı gelişmiş yöntemler.

  1. Systemd Timers– Modern Linux dağıtımlarında cron’a alternatif olarak systemd timer’lar kullanılabilir. Daha gelişmiş zamanlama seçenekleri, bağımlılık yönetimi ve daha iyi logging sunar. Özellikle karmaşık servis yönetimi gereken durumlarda tercih edilir.
  2. Anacron– Sürekli açık olmayan sistemler için ideal bir çözümdür. Anacron, sistemin kapalı olduğu zamanlarda çalışması gereken job’ları sistem açıldığında telafi eder. Laptop’lar ve ara sıra kapatılan sunucular için mükemmeldir.
  3. Jenkins ve CI/CD Araçları- Büyük projelerde, karmaşık iş akışları için Jenkins, GitLab CI, GitHub Actions gibi araçlar kullanılabilir. Web tabanlı yönetim, detaylı loglama, paralel çalıştırma ve entegrasyon özellikleri sunar.
  4. Bulut Zamanlayıcılar– AWS CloudWatch Events, Google Cloud Scheduler, Azure Logic Apps gibi bulut servisleri, ölçeklenebilir ve yönetimi kolay zamanlama çözümleri sunar. Serverless mimarilerde yaygın olarak kullanılır.

Gelişmiş cron tekniklerinden biri at komutunu kullanmaktır. Cron tekrarlayan görevler içinken, at komutu tek seferlik zamanlanmış görevler için idealdir:

echo "/yedekleme/scripti.sh" | at 02:00 tomorrow
  • Bu komut yarın sabah 02:00’da tek seferlik yedekleme yapacaktır. At komutu, planlı bakımlar, tek seferlik raporlar veya belirli bir tarihte çalışması gereken işlemler için kullanışlıdır.
Cron Job kronoloji

Docker container’larında cron kullanımı da özel dikkat gerektirir. Container’lar genellikle tek bir process çalıştırmak üzere tasarlandığından, cron daemon’u ekstra bir katman olarak eklemeniz gerekir. İşte Docker’da cron kullanımı için bir örnek Dockerfile:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y cron
COPY cronjobs /etc/cron.d/cronjobs
RUN chmod 0644 /etc/cron.d/cronjobs
RUN crontab /etc/cron.d/cronjobs
CMD ["cron", "-f"]

Kubernetes ortamlarında ise CronJob kaynakları kullanarak zamanlı görevleri yönetebilirsiniz. Kubernetes CronJob’lar cron syntax’ını kullanır ancak container’ları çalıştırır, bu da daha izole ve ölçeklenebilir bir yaklaşım sunar.

# Zaman Dilimi Sorunları

Cron sistem saatini kullanır. Sunucunuzun saat dilimi ayarlarını kontrol edin:

timedatectl
# veya
date
  • Saat dilimini değiştirmek için:
sudo timedatectl set-timezone Europe/Istanbul

Farklı saat dilimlerinde çalışan sunucularınız varsa, UTC kullanmak ve uygulama katmanında dönüşüm yapmak genellikle en iyi pratiktir.

# Performans Sorunları

Aynı anda çok fazla cron job çalışıyorsa sistem yavaşlayabilir. Çözümler:

  • Job’ları farklı zamanlara yayın
  • Kaynak yoğun işleri gece saatlerine planlayın
  • nice komutuyla öncelik düşürün: nice -n 19 /script.sh
  • Uzun süren job’larda timeout ayarlayın
  • Paralel çalışan job sayısını sınırlayın

Cron job öğrenme yolculuğunuzu tamamladınız! Ancak asıl öğrenme pratik yaparak gerçekleşir. İşte size önerilerimiz:

Pratik Yapın:Basit bir yedekleme scripti yazın ve her gün çalışacak şekilde ayarlayın. Loglarını takip edin, çıktıları inceleyin. Deneyim en iyi öğretmendir.
Monitoring Kurun:Cron job’larınızı izleyen bir sistem kurun. Healthchecks.io, Cronitor gibi ücretsiz servisleri deneyin. Başarısız çalışmalarda anında bildirim alın.
Dokümante Edin:Oluşturduğunuz her cron job’ı dokümante edin. Ne yapıyor, neden var, ne sıklıkla çalışıyor? Gelecekteki siz veya ekip arkadaşlarınız size teşekkür edecek.
Faydalı Kaynaklar:crontab.guru – Cron syntax test aracı
man cron – Resmi dokümantasyon
Cron best practices – GitHub gist’leri
Stack Overflow – Cron tag’ı
Son Tavsiyeler:Cron job’lar güçlü araçlardır ancak dikkatli kullanılmalıdır. Kritik sistem işlemleri için mutlaka yedekleme ve geri alma planınız olsun. Test ortamında denemeler yapın. Logları düzenli inceleyin. Güvenlik önlemlerini ihmal etmeyin. En önemlisi, basit başlayın ve kademeli olarak karmaşıklığı artırın. İlk cron job’ınız mükemmel olmak zorunda değil. Zaman içinde deneyim kazandıkça daha gelişmiş teknikler uygulayabilirsiniz.

Sık Sorulan Sorular

  1. Cron job çalışıyor mu nasıl anlarım?
    • En basit yöntem sistem loglarını kontrol etmektir: grep CRON /var/log/syslog veya tail -f /var/log/cron komutuyla cron aktivitesini görebilirsiniz. Ayrıca job’ınızın çıktısını bir dosyaya yönlendirip o dosyayı kontrol edebilirsiniz.
  2. Cron job manuel çalışıyor ama zamanı gelince çalışmıyor. Neden?
    • Bu genellikle ortam değişkenleri sorunudur. Cron minimal bir shell ortamında çalışır, PATH ve diğer değişkenler normal terminal oturumunuzdaki gibi değildir. Çözüm: Script’inizde tam yollar kullanın veya crontab’ın başında PATH değişkenini tanımlayın.
  3. Cron job neden çok fazla e-posta gönderiyor?
    • Varsayılan olarak cron her çıktıyı e-posta olarak gönderir. Bunu engellemek için çıktıyı /dev/null’a yönlendirin: * * * * * komut > /dev/null 2>&1 Veya crontab başına MAILTO="" ekleyerek tüm e-postaları kapatabilirsiniz.
  4. Script çalışıyor ama dosya yazamıyor. Neden?
    • İzin sorunları yaygındır. Cron job’ın hangi kullanıcıyla çalıştığını kontrol edin (whoami > /tmp/test.txt ekleyerek) ve o kullanıcının hedef dizine yazma izni olduğundan emin olun.
  5. Cron job’ımı nasıl durdururum?
    • crontab -e ile dosyayı açın ve ilgili satırı silin veya başına # koyarak yoruma çevirin. Kaydettiğinizde değişiklik hemen aktif olur, servis restart’ına gerek yok.

Editör Notu: İçeriğimiz okuyucu desteğiyle finanse edilmektedir. Bu, bağlantılarımızdan bazılarına tıkladığınızda komisyon kazanabileceğimiz anlamına gelir.

Burada sadece teorik bilgiler değil, gerçek deneyimlere dayanan pratik çözümler var. Burada yol arkadaşı olacağız. Karmaşık konuları birlikte çözecek, teknik detayları birlikte aşacağız...

Yazarın Profili

Yorumlar (6)

  1. Zamanlama kısmına doğru gibi görünen bir ifade yazmama rağmen görev çalışmıyor. Özellikle “her ayın ilk Pazartesi günü” gibi biraz karmaşık ifadeleri nasıl yazmam gerektiğini tam olarak kestiremiyorum. Bu tür özel tarihsel koşullarda en doğru cron ifadesi nasıl oluşturulur? Ayrıca yanlış yazılmış zamanlamaları test etmenin pratik bir yolu var mı?

    • Cron job’ların en çok kafa karıştıran kısmı zamanlama formatlarıdır. Ayın ilk Pazartesi günü gibi özel bir koşul için standart cron ifadeleri yetersiz kalabilir. Bunun için şu şekilde bir çözüm önerilebilir: 0 0 * * 1 [ "$(date +\%m)" -eq "$(date -d "$(date +\%Y-\%m-01) +$(( (8 - $(date -d "$(date +\%Y-\%m-01)" +\%u) ) % 7 )) days" +\%m)" ] && /path/to/command
      Bu karmaşık görünse de, ayın ilk Pazartesi günü olup olmadığını kontrol eden bir bash kontrolüdür.

      Zamanlama ifadelerini test etmek için https://crontab.guru/ gibi siteler oldukça kullanışlıdır. Buraya ifadenizi girerek hangi günlerde çalışacağını görselleştirebilirsiniz. Ayrıca echo “cron ifadeniz” | crontab -l ile crontab’ınıza yazmadan önce komutunuzu test dosyasına eklemeniz de iyi bir alışkanlık olacaktır.

  2. Ben çoğunlukla cPanel veya Plesk panel üzerinden cron job oluşturuyorum ama bazen komutlar tam çalışmıyor. Web uygulamalarında özellikle PHP dosyalarını tetiklerken doğru yolu ve PHP sürümünü belirtmek zor olabiliyor. Panele özgü cron job ayarlarında dikkat etmemiz gereken püf noktalar neler olabilir?

    • Web hosting panellerinde cron job ayarlamak genellikle kolay görünse de, bazı ince detaylar büyük fark yaratır:

      Mutlak Yol Kullanın: php script.php yerine /usr/local/bin/php /home/kullanici/public_html/cron/script.php gibi tam yollar kullanın.
      PHP Sürümünü Belirtin: Sunucunuzda birden fazla PHP sürümü varsa, doğru sürümün yolunu öğrenip kullanmanız gerekir. Örneğin: /opt/cpanel/ea-php82/root/usr/bin/php /home/kullanici/public_html/cron/task.php
      — Dosya İzinleri: Cron job çalışmazsa, script.php dosyasının çalıştırılabilir (chmod 755) olduğundan emin olun.
      — Ayrıca panelde her cron job için e-posta bildirimi kısmını pasifleştirmediyseniz, e-posta kutunuz dolabilir. Komutun sonuna > /dev/null 2>&1 ekleyerek gereksiz çıktıları bastırabilirsiniz.

  3. Cron job’lar sabit zamanlamalara göre çalışıyor. Ancak ben örneğin sadece CPU kullanımı ‘un altındaysa ya da bir dosya varsa çalışacak bir cron job oluşturmak istiyorum. Zamanlamanın dışında koşullara bağlı cron job yapmak mümkün mü? Varsa örnek verebilir misiniz?

    • Çok güzel ve ileri düzey bir kullanım örneği! Evet, cron doğrudan bu tür koşulları desteklemez ama komutun içine koşul yerleştirerek bu yapılabilir.

      — Örneğin CPU kullanımı kontrolü: */5 * * * * [ $(uptime | awk -F'load average:' '{ print $2 }' | cut -d',' -f1 | awk '{print int($1)}') -lt 3 ] && /path/to/script.sh

      — Veya bir dosyanın varlığına göre: */10 * * * * [ -f /tmp/dosya_mevcut.txt ] && /path/to/script.sh

      Daha esnek bir yapı gerekiyorsa cron yerine systemd timer veya inotify gibi sistem araçları da tercih edilebilir. Ama cron içinde koşullu komutlar yazarak çok işlevsel sonuçlar elde edebilirsiniz.