Python Betiklerini Belirli Saatlerde Kendiliğinden Çalıştırmak
Beceri rehberi

Python Betiklerini Belirli Saatlerde Kendiliğinden Çalıştırmak

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Python betiklerini cron, Windows görev zamanlayıcı ve zamanlama kütüphaneleriyle otomatik çalıştırın: yöntemler, adım adım kurulum ve sık hatalar.

Zamanlanmış görev nedir ve Python betiği neden zamanlanır?

Bir Python betiğini elle çalıştırmak, otomasyonun yarısıdır. Gerçek kazanç, betiğin kimse hatırlamadan her sabah, her saat başı ya da her ayın son iş gününde kendiliğinden çalışmasıyla gelir. Zamanlanmış görev, belirli bir takvime ya da olaya bağlı olarak bir programı otomatik başlatan düzenektir.

Python betiğini zamanlamanın temelde farklı yolları vardır. Birincisi işletim sisteminin kendi zamanlayıcısını kullanmaktır: Linux ve macOS'ta cron, Windows'ta görev zamanlayıcı. Bu yöntemde zamanlayıcı betiği dışarıdan başlatır; betik işini yapıp kapanır. Diğeri, Python içinde çalışan bir zamanlama kütüphanesi kullanmaktır; schedule gibi hafif kütüphaneler ya da APScheduler gibi daha kapsamlı çözümler bu gruptadır. Bu yöntemde betik sürekli açık kalır ve içeride kendi görevlerini zamanı geldikçe tetikler.

Sık kullanılan zamanlanmış iş örnekleri: • Gece çalışan veri çekme ve rapor üretme işleri • Belirli aralıkla bir sistemin durumunu kontrol edip uyarı gönderme • Eski dosyaların haftalık temizliği ve arşivlenmesi • Ay sonu kapanışında tabloların birleştirilmesi • Yedeklerin alınması ve doğrulanması

Hangi yolun seçileceği, işin niteliğine ve çalışma ortamına bağlıdır; farkları sıradaki bölümde ele alıyoruz.

İşletim sistemi zamanlayıcısı mı, Python kütüphanesi mi?

İşletim sistemi zamanlayıcısı basit ve dayanıklıdır. Betik çalışıp biter, bellek sızıntısı gibi sorunlar birikmez; bilgisayar yeniden başlasa bile zamanlama sistem tarafından sürdürülür. Hata durumunda bir sonraki çalışma yine tetiklenir. Günlük, haftalık, aylık gibi klasik takvimler için ilk tercih budur. Dezavantajı, zamanlamanın kodun dışında, sistem ayarlarında durmasıdır; başka bir bilgisayara taşırken bu ayarı yeniden kurmak gerekir.

Python içi kütüphaneler zamanlamayı kodun içine alır. Betikle birlikte sürüm kontrolüne girer, aynı süreçte birçok farklı görevi farklı aralıklarla yönetebilir. APScheduler gibi kütüphaneler takvim tabanlı, aralık tabanlı ve tek seferlik görevleri destekler. Ancak betik sürekli açık kalmak zorundadır; süreç çökerse zamanlama durur. Bu yüzden sürecin bir hizmet olarak yönetilmesi (çökerse yeniden başlatılması) gerekir.

Karar ölçütleri şöyle özetlenebilir: • Az sayıda, takvim tabanlı iş varsa: işletim sistemi zamanlayıcısı • Çok sayıda iş, farklı aralıklar, kodla birlikte taşınabilirlik gerekiyorsa: Python kütüphanesi • Büyük ekiplerde, bağımlılıkları olan, izlenmesi ve yeniden denenmesi gereken iş zincirleri varsa: Airflow gibi iş akışı orkestrasyon araçları • Bulutta çalışıyorsa: bulut sağlayıcısının zamanlanmış çalıştırma hizmetleri

Betiği zamanlamaya hazırlamak: kilit, log ve hata yakalama

Zamanlamadaki sorunların çoğu betiğin zamanlanmaya hazır olmamasından çıkar. Önce betiği elle çalıştırıp doğrulayın, tüm yolları mutlak yola çevirin ve zamanlayıcıda sanal ortamınızın yorumlayıcısına tam yolla başvurun; zamanlayıcı betiği sizin bulunduğunuz klasörden başlatmaz ve ortam değişkenlerinizi görmez. Python içi zamanlama için schedule kütüphanesiyle çalışan örnek, çakışan çalışmaları kilit dosyasıyla engeller:

import logging import os import time from pathlib import Path

import schedule

def rapor_uret(): logging.info("Rapor üretildi")

def kilitli_calistir(): kilit = Path("rapor.kilit") if kilit.exists(): logging.warning("Önceki çalışma sürüyor, bu çalışma atlandı") return kilit.touch() try: rapor_uret() except Exception: logging.exception("Rapor üretimi başarısız") finally: kilit.unlink()

schedule.every().day.at(os.environ["RAPOR_SAATI"]).do(kilitli_calistir)

while True: schedule.run_pending() time.sleep(float(os.environ["KONTROL_ARALIGI"]))

Saat ve kontrol aralığı ortam değişkenlerinden gelir; betik değişmeden farklı ortamlara taşınır. İşletim sistemi zamanlayıcısını tercih ederseniz döngü ve schedule gerekmez: zamanlayıcı betiği çağırır, betik işini yapıp kapanır. Zaman dilimine dikkat edin: sunucunun saati sizin yerel saatinizden farklı olabilir, bu yüzden loglara zaman damgası koyun ve çalışma saatini bilinçli seçin.

Örnek senaryo: gece çalışan veri çekme ve sabah raporu

Örneğin bir finans ekibi her iş günü sabahı bir önceki günün tahsilat durumunu görmek istiyor. Betik gece bir API'den ödeme verilerini çeker, temizler, özet tablo üretir ve sonucu paylaşımlı klasöre yazar. Sabah ayrı bir görev bu özeti e-postayla ekibe gönderir.

Bu iş birbirinden ayrı zamanlanmış görevler olarak kurulur: gece veri hazırlama ve sabah dağıtım. Aralarında bağımlılık vardır; ilk görev başarısız olursa ikincisi eski veriyi göndermemelidir. Bunun için ilk görev bitişte bir "tamamlandı" işaret dosyası yazar, ikinci görev bu dosyanın bugünün tarihli olup olmadığına bakar. Dosya yoksa rapor yerine uyarı gönderilir.

Hafta sonları ve resmî tatiller de düşünülmelidir: iş günü olmayan günlerde çalışma istemiyorsanız betik başında günün iş günü olup olmadığını kontrol edin ya da zamanlayıcı ifadesini yalnızca hafta içi günlerle sınırlayın. Betik başarısız olursa tek seferde değil, bir süre sonra birkaç kez yeniden denenir; hâlâ olmazsa teknik ekibe bildirim gider.

Zamanlanmış görevlerin sessizce bozulma nedenleri

Zamanlanmış görevlerin tehlikesi sessizce bozulmalarıdır. Kimse bakmadığı için haftalarca çalışmayan bir görev ancak bir şey eksik çıkınca fark edilir. Başlıca hatalar:

  • Göreli yol kullanmak. Terminalden çalışan betik zamanlayıcıdan çalışmaz.
  • Yanlış yorumlayıcıyı çağırmak. Sistem Python'u ile sanal ortamdaki farklı paket kümelerine sahiptir; zamanlayıcı yanlışını çağırınca eksik paket hatası alınır.
  • Loglamamak. Hata verdiğinde nedenini görecek hiçbir iz kalmaz.
  • Çakışan çalışmalar. Önceki çalışma bitmeden yenisi başlarsa aynı dosyaya birden çok süreç yazar. Başlangıçta bir kilit dosyası oluşturup çalışma sürüyorsa yeni çalışmayı atlayın.
  • Aşırı sık zamanlama. Dış sistemlere her dakika istek göndermek hız sınırına takılmanıza yol açabilir.
  • Zaman dilimi ve yaz saati kayması. Saat değişimi olan sistemlerde iş ya çift kez ya hiç çalışmayabilir.
  • Bilgisayarın kapalı olması. Kişisel bilgisayarda zamanlanan iş, bilgisayar uykudaysa kaçırılır. Kritik işleri sunucuda çalıştırın.
  • Başarı izlenmemesi. Çalışma başarısız olsa bile kimse uyarılmaz. Her kritik görev başarıda ya da başarısızlıkta kendini bildirmelidir.

İyi bir uygulama, her görev için küçük bir kayıt tutmaktır: ne zaman çalıştı, ne kadar sürdü, sonuç neydi.

Zamanlama becerisinde öğrenme sırası

Başlangıçta sadece ekrana bir mesaj yazan basit bir betiği zamanlayıcıya tanıtıp çalıştığını görmek yeterlidir. Böylece zamanlayıcının mantığını, ortam farklarını ve log yazmanın önemini deneyimlersiniz. Sonra gerçek bir işi, örneğin bir klasör temizliğini, zamanlayın.

Orta düzeyde betikleri hata yönetimi ve loglamayla sağlamlaştırır, yeniden deneme mantığı ekler, işlerin birbirine bağımlılığını yönetirsiniz. Python içi zamanlama kütüphanelerini de bu aşamada deneyebilirsiniz.

İleri düzeyde iş akışı orkestrasyon araçları, kuyruklar, konteynerlerde zamanlanmış çalıştırma ve izleme panoları devreye girer. Bu düzeyde hedef, onlarca işin birbirine bağlı, izlenebilir ve kendini onaran bir yapıda yürümesidir.

Periyodik işleri otomatikleştiren ekipler için Mindset bağlamı

Mindset kataloğundaki Python Otomasyon ile Verimlilik programının Zamanlanmış Görevler ve Süreç Yönetimi modülü bu konuyu doğrudan işler. Düzenli rapor ve veri hazırlığı yapan finans, operasyon ve BT destek ekipleri için elle yürütülen periyodik görevlerin envanterini çıkarıp hangilerinin zamanlanabileceğini belirlemek mantıklı bir başlangıç noktasıdır.

İlgili Mindset programı

Python Otomasyon ile Verimlilik

Sık sorulanlar

Sık sorulan sorular

Python betiğini Windows'ta otomatik nasıl çalıştırırım?

Windows görev zamanlayıcısında yeni bir görev oluşturup tetikleyici olarak zamanı, eylem olarak da Python yorumlayıcısının yolunu ve betik yolunu verirsiniz. Başlangıç klasörünü de belirtmek önemlidir. Görevin kullanıcı oturumu kapalıyken de çalışıp çalışmayacağını ayrıca ayarlamanız gerekir; aksi halde oturum kapalıyken görev tetiklenmez.

Cron ile Python betiği nasıl çalıştırılır?

Linux ya da macOS'ta cron tablosuna zaman ifadesi ve çalıştırılacak komutu eklersiniz. Komutta Python yorumlayıcısının ve betiğin mutlak yolunu kullanın, çıktıyı bir log dosyasına yönlendirin. Cron'un ortamı sizin terminalinizden farklı olduğu için gerekli ortam değişkenlerini cron tablosunda ya da betik içinde tanımlamalısınız.

schedule kütüphanesi ile cron arasındaki fark nedir?

Cron işletim sistemine aittir ve betiği dışarıdan başlatır; schedule ise betik içinde çalışan ve süreç açık kaldığı sürece görevleri tetikleyen bir Python kütüphanesidir. Cron daha dayanıklıdır, schedule ise zamanlamayı kodla birlikte taşımayı kolaylaştırır. Süreç çökerse schedule durur, bu yüzden hizmet olarak yönetilmesi gerekir.

Zamanlanmış Python görevi çalıştı mı nasıl anlarım?

Betiğin başında ve sonunda zaman damgalı log satırı yazdırın, kritik işlerde bitişte başarı bildirimi gönderin. Ayrıca çıktı dosyasının güncellenme zamanını kontrol eden ayrı bir izleme adımı eklenebilir. Hiçbir iz kalmıyorsa görev tetiklenmemiş demektir; zamanlayıcının kendi kayıtlarına bakmak tetiklenme sorununu ayırt eder.

Python betiğini bulutta zamanlamak mümkün mü?

Evet. Büyük bulut sağlayıcıları zamanlanmış çalıştırma hizmetleri sunar; bunlarla betiği bir sunucusuz fonksiyon ya da konteyner olarak belirli aralıklarla çalıştırabilirsiniz. Bu yöntem bilgisayarınızın açık olma zorunluluğunu ortadan kaldırır. Hizmetin ayrıntıları ve sınırları sağlayıcıya göre değişir, kullanmadan önce dokümantasyonu inceleyin.

Python Betiğini Zamanlanmış Görev Olarak Çalıştırma