Sunucu yönetiminin en sık tekrarlanan işleri aslında insan eli değmeden çalışabilir: gece yarısı veritabanı yedeği almak, her saat başı bir API'den veri çekmek ya da haftalık olarak eski logları silmek. Linux dünyasında bu otomasyonun kalbinde cron daemonu yatar. Aşağıda bu mekanizmanın nasıl çalıştığını, sözdizimini ve sahada karşılaşacağınız püf noktalarını ele alıyoruz.
Cron Job Tam Olarak Nedir?
Cron, arka planda sürekli çalışan bir servis (crond) tarafından yönetilen, belirli zaman aralıklarında komut veya betik çalıştıran bir zamanlayıcıdır. Her bir zamanlanmış girdiye cron job denir. Servis dakikada bir uyanır, ilgili tabloları (crontab) kontrol eder ve zamanı gelmiş görevleri tetikler. Yani çözünürlük genellikle bir dakikadır; saniye bazında tetikleme için cron tek başına yeterli değildir.
Crontab Sözdizimi
Bir cron satırı beş zaman alanı ve ardından çalıştırılacak komuttan oluşur. Soldan sağa sıralama şöyledir:
# ┌───── 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)
# │ │ │ │ │
# * * * * * calistirilacak-komut
# Her gün 03:30'da veritabani yedegi
30 3 * * * /usr/local/bin/yedek.sh
# Her 15 dakikada bir saglik kontrolu
*/15 * * * * /usr/bin/curl -fsS https://ornek.com/health >/dev/null
# Hafta ici saat 09:00'da rapor uret
0 9 * * 1-5 /opt/scripts/rapor.pyAlanlarda * (tüm değerler), */5 (her beş birimde bir), 1-5 (aralık) ve 1,15,30 (liste) gibi ifadeleri serbestçe birleştirebilirsiniz. Çoğu modern cron sürümü ayrıca @reboot, @daily, @hourly ve @weekly gibi okunması kolay kısayolları da kabul eder. Örneğin @reboot /opt/scripts/baslat.sh satırı, sunucu her yeniden başladığında ilgili betiği bir kez tetikler; bu, servis niteliği taşımayan ama açılışta çalışması gereken işler için pratik bir yöntemdir.
Zaman ifadelerini hesaplarken kafa karışıklığını önlemek için şunu hatırlamakta fayda var: ayın günü ile haftanın günü alanlarının ikisi birden belirtildiğinde, cron bunları VE değil VEYA mantığıyla değerlendirir. Yani 0 0 1 * 1 ifadesi "her ayın 1'inde ya da her Pazartesi" anlamına gelir, ikisinin kesişimi değil.
Crontab Komutuyla Görev Yönetimi
Kullanıcı bazlı zamanlanmış görevleri yönetmenin standart yolu crontab komutudur. Sık kullandığınız bayraklar:
- crontab -e — mevcut kullanıcının crontab dosyasını düzenler.
- crontab -l — tanımlı görevleri listeler.
- crontab -r — tüm görevleri siler (dikkatli olun, geri dönüşü yoktur).
- crontab -u kullanici -e — root iken başka bir kullanıcının tablosunu düzenler.
Kullanıcı crontab'ları çoğu dağıtımda /var/spool/cron/ altında saklanır; Debian ve türevlerinde bu yol /var/spool/cron/crontabs/ şeklindedir. Doğrudan elle düzenlemek yerine crontab -e kullanmak dosya kilitleme ve doğrulama açısından daha güvenlidir, çünkü düzenleyiciden çıkarken cron sözdizimini kontrol eder ve hatalı bir satır varsa tabloyu kaydetmeyi reddeder. Hangi kullanıcıların cron kullanabileceğini /etc/cron.allow ve /etc/cron.deny dosyalarıyla sınırlamak da mümkündür; bu, çok kullanıcılı sunucularda yetki yönetimini sıkılaştırmanın temiz bir yoludur.
Sistem Geneli Cron Dizinleri
Kullanıcı tablolarının yanında sistem düzeyinde de cron yapılandırması bulunur. Bunların en bilineni /etc/crontab ve /etc/cron.d/ dizinidir. Buradaki satırlar, kullanıcı crontab'ından farklı olarak zaman alanlarından sonra bir de kullanıcı adı sütunu içerir:
# /etc/cron.d/temizlik
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 2 * * * root find /var/log/uygulama -name '*.log' -mtime +14 -deleteAyrıca /etc/cron.daily, /etc/cron.weekly ve /etc/cron.hourly dizinlerine koyduğunuz çalıştırılabilir betikler, run-parts aracılığıyla otomatik olarak ilgili periyotta tetiklenir. Belirli bir saate ihtiyacınız yoksa bu klasörler işi oldukça basitleştirir.
Ortam Değişkenleri ve Sık Yapılan Hatalar
Cron ortamı, etkileşimli kabuğunuzdan çok daha dardır. PATH genellikle minimaldir ve .bashrc okunmaz. Bu yüzden "komut satırında çalışıyor ama cron'da çalışmıyor" şikayetlerinin büyük kısmı şu nedenlerden kaynaklanır:
- Eksik tam yol:
phpyerine/usr/bin/phpgibi mutlak yollar kullanın. - Çalışma dizini varsayımı: Cron, işi kullanıcının ev dizininden başlatır; betik içinde
cdile doğru dizine geçin. - Yüzde işareti: Komut içindeki
%karakteri cron tarafından yeni satır olarak yorumlanır;\%şeklinde kaçırın. - Yutulan çıktı: Hata mesajlarını görmek için çıktıyı bir dosyaya yönlendirin:
>>/var/log/job.log 2>&1.
Cron mu systemd Timer mı?
Modern dağıtımlarda systemd timer'ları cron'a güçlü bir alternatif sunar. Hangisini seçeceğiniz ihtiyaca göre değişir:
| Özellik | Cron | systemd Timer |
|---|---|---|
| Kurulum kolaylığı | Tek satır, çok hızlı | İki dosya (.service + .timer) |
| Log yönetimi | Manuel yönlendirme gerekir | journalctl ile entegre |
| Kaçırılan görev telafisi | Yok | Persistent=true ile var |
| Bağımlılık tanımı | Yok | Servis bağımlılıkları desteklenir |
| Yaygınlık | Her yerde, taşınabilir | systemd gerektirir |
Basit periyodik işler için cron hâlâ en pratik çözüm; karmaşık bağımlılıkları ve detaylı loglaması olan görevlerde ise timer'lar öne çıkar.
Paylaşımlı Hosting ve Sunucu Tarafında Cron
Cron'u nasıl kullanacağınız büyük ölçüde barındırma türünüze bağlıdır. Paylaşımlı bir web hosting paketinde cron job tanımlamak genellikle cPanel üzerindeki Cron Jobs arayüzünden yapılır ve dakika bazında bir alt sınır uygulanabilir. Buna karşılık tam kök erişimi gerektiren, sistem geneli zamanlayıcılar kurmak istediğinizde bir sanal sunucu kiralamak size /etc/cron.d'den systemd timer'larına kadar her katmanda tam kontrol verir.
Bogahost Önerisi: Kritik yedekleme cron'larınıza her zaman bir bildirim katmanı ekleyin. Job başarıyla bittiğinde bir izleme servisine ping atan basit bir
curlsatırı, işin sessizce çalışmayı bırakmasını günler sonra değil dakikalar içinde fark etmenizi sağlar.Test ve Hata Ayıklama İpuçları
Bir cron job'ı canlıya almadan önce komutu doğrudan terminalde, mümkünse cron'a benzer dar bir ortamda çalıştırın:
env -i /bin/bash --noprofile --norcile temiz bir kabukta denemek gerçek davranışı taklit eder. Çalışıp çalışmadığını anlamanın en hızlı yolu ise log dosyasını izlemektir. Çoğu sistemde cron etkinliği/var/log/syslogveya/var/log/cronaltında görünür:grep CRON /var/log/syslog | tail -n 20Özetle
Cron, Linux sunucularındaki tekrar eden işleri sade ve güvenilir biçimde otomatikleştirmenin temel aracıdır. Sözdizimini kavradıktan, ortam farklılıklarına dikkat ettikten ve çıktıyı düzgün loglamaya başladıktan sonra, yedekten rapora kadar pek çok işi tamamen kendi haline bırakabilirsiniz. İhtiyaçlarınız büyüdükçe systemd timer'larıyla birlikte kullanmak, otomasyonunuzu hem daha şeffaf hem de daha dayanıklı hale getirecektir.
Reklam Alanı
İçerik Altı (728x90)
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yap