29 Ekim 2026 - 03:12
Linux’ta Crontab ile Zamanlanmış Görevler Nasıl Kullanılır? Görseli
Linux

Linux’ta Crontab ile Zamanlanmış Görevler Nasıl Kullanılır?

0 Yorumlar

Bir komutun terminalde çalışması, cron altında da aynı sonucu vereceğini göstermez. Çalıştıran kullanıcı, ortam değişkenleri, çalışma dizini ve izinler değişebilir. Zamanlama satırından önce komutu bağımsız bir betik olarak çalışır duruma getirin.

Beş zaman alanı ve çalışacak komut

Kullanıcı crontab dosyasında sıra dakika, saat, ayın günü, ay ve haftanın günüdür. Ardından komut gelir. Örneğin aşağıdaki satır, her gün saat 03:15 için tanımlanmıştır:

BASH
15 3 * * * /home/app/bin/check-site.sh

/etc/crontab ve yaygın /etc/cron.d dosyalarında komuttan önce kullanıcı alanı da bulunur. Bu alanı crontab -e ile düzenlenen kullanıcı dosyasına eklemeyin. Ayın günü ve haftanın günü birlikte sınırlandırıldığında yaygın cron uygulamalarında eşleşme “veya” mantığıyla çalışır; beklediğiniz takvimi kullandığınız sistemin kılavuzuyla karşılaştırın.

BASH
crontab -l
crontab -e

İlk komut tanımları listeler, zamanlayıcı servisinin çalıştığını kanıtlamaz. İlk kullanımda kullanıcı için crontab bulunmadığı bildirilebilir. Değişiklikten önce mevcut tanımları güvenli bir yere kaydedin. crontab -r tek satırı değil kullanıcının bütün crontab dosyasını kaldırır.

İzlenebilir bir HTTP kontrol betiği

Aşağıdaki örnek app kullanıcısına ait, yalnızca durum kontrolü yapan bir betiktir. Adresi kendi yetkili test adresinizle değiştirin. /usr/bin/curl yolunu command -v curl ile doğrulayın.

BASH
#!/bin/sh
PATH=/usr/bin:/bin
export PATH
url='https://example.com/'
if code=$(/usr/bin/curl --fail --silent --show-error \
    --connect-timeout 5 --max-time 20 \
    --output /dev/null --write-out '%{http_code}' "$url"); then
    printf 'HTTP check completed: %s\n' "$code"
else
    result=$?
    printf 'HTTP check failed: curl=%s http=%s\n' "$result" "$code" >&2
    exit "$result"
fi

Betik sayfayı kaydetmez, fakat ağ veya HTTP hata bilgisini gizlemez. Bu basit kontrol yönlendirmeleri takip etmez; 3xx yanıtı başarılı curl çıkışı verebilir. Uygulamanın sağlıklı sayılması için tam 200 veya belirli bir gövde gerekiyorsa ayrıca doğrulayın. TLS hatasını aşmak için -k eklemeyin.

Aynı işin üst üste binmesini engelleyin

/home/app/bin, /home/app/run ve /home/app/log dizinlerini uygun sahiplik ve izinlerle hazırlayın; betiğe çalıştırma izni verin. Paylaşılan ve herkesin yazabildiği bir dizini kilit dosyası için kullanmayın. util-linux flock mevcutsa, beş dakikalık örnek kullanıcı crontab satırı şöyledir:

BASH
*/5 * * * * /usr/bin/flock -n /home/app/run/check-site.lock /home/app/bin/check-site.sh >> /home/app/log/check-site.log 2>&1

Kilit alınamıyorsa -n beklemeden işi atlar; sıraya koymaz. Atlanan çalışmaların da izlenmesi gerekiyorsa ayrı bir kayıt mekanizması kurun. Log dosyasının sınırsız büyümemesi için rotasyon planlayın. Hataları görmezden gelmek amacıyla bütün çıktıyı /dev/null içine yönlendirmeyin.

“Çalışmadı” derken hangi aşama başarısız?

Önce betiği aynı kullanıcıyla ve sade bir ortamla çalıştırın. Sonra dağıtımınızda adı cron veya crond olan servisin durumuna, tetikleme kayıtlarına ve betiğin kendi loguna bakın. Tetikleme kaydı, betiğin başarıyla bittiği anlamına gelmez. Disk doluluğu ve log dizininin yazılabilirliği de kontrol listesinde olmalıdır.

Sunucunun saat dilimini doğrulayın. Yaz/kış saati geçişleri ve kapalı kaldığı süreler için davranış cron uygulamasına göre değişebilir. Kaçırılmış işlerin sonradan çalıştırılması gerekiyorsa bunu varsaymak yerine uygun timer veya iş kuyruğu tasarlayın. Cron satırındaki yüzde işaretinin özel anlamı da vardır; örnekteki curl biçimi bu nedenle ayrı betikte tutulmuştur. Ayrıntılar: crontab dosya biçimi.

Benzer Yazılar

Yorumlar (0)

Henüz yorum yok. İlk yorum yapan sen ol!

Yorum Yap