Mario

WFN Üye
Konular
581
Mesajlar
581
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
İşletim sisteminin zamanlama aracını kullanarak Python scriptinizi belirli aralıklarla otomatik çalıştırabilirsiniz. Linux ve macOS'ta genellikle cron, Windows'ta ise Görev Zamanlayıcı kullanılır. Zamanlayıcı, belirlediğiniz saatte Python yorumlayıcısını çağırır; script çalışır ve sonucu dosyaya yazabilir veya hata oluştuğunda ayrıca günlük oluşturabilir. Scripti önce komut satırından elle çalıştırıp doğru Python yolu, çalışma klasörü ve dosya izinlerini doğrulamanız gerekir.

Önce scripti zamanlayıcı dışında çalışır hâle getirin​


Zamanlayıcıya eklemeden önce scriptin elle çalıştığını kontrol edin. Örneğin rapor.py adlı dosyanız /home/kullanici/projeler/rapor klasöründe bulunsun:

Python:
from datetime import datetime
from pathlib import Path

kayit = Path("calisma.log")
with kayit.open("a", encoding="utf-8") as dosya:
    dosya.write(f"Script çalıştı: {datetime.now().isoformat()}\\n")

Bu örnek, her çalıştırıldığında aynı klasördeki calisma.log dosyasına tarih ve saat ekler. Böylece zamanlayıcının scripti gerçekten çalıştırıp çalıştırmadığını gözlemleyebilirsiniz. Dosya oluşmuyorsa sorun zamanlayıcıda değil, önce scriptin çalışma klasöründe, yazma izninde veya Python kurulumundadır.

Komut satırında scripti çalıştırın:

Kod:
python rapor.py

Bazı sistemlerde komut python3 olabilir. Hangi komutun kullanılacağını anlamak için işletim sisteminizde çalışan komutu tercih edin. Üretim veya sunucu ortamında Python çalıştırıcısının tam yolunu kullanmak daha güvenlidir; çünkü zamanlayıcılar, sizin etkileşimli terminalinizde bulunan ortam değişkenlerini her zaman aynı şekilde yüklemeyebilir.

Sanal ortam kullanıyorsanız scripti çalıştırmadan önce sanal ortamı etkinleştirmek yerine doğrudan o ortamdaki Python dosyasını çağırabilirsiniz. Örneğin:

Kod:
/home/kullanici/projeler/rapor/.venv/bin/python /home/kullanici/projeler/rapor/rapor.py

Bu yaklaşım, zamanlayıcının sistemdeki başka bir Python sürümünü kullanmasını önler.

Linux ve macOS'ta cron ile çalıştırma​


cron, Unix tabanlı sistemlerde komutları belirlenen zamanlarda çalıştıran zamanlama servisidir. Cron kaydında beş zaman alanı bulunur: dakika, saat, ayın günü, ay ve haftanın günü. Ardından çalıştırılacak komut yazılır.

Cron düzenleyicisini açın:

Kod:
crontab -e

Örneğin scripti her 15 dakikada bir çalıştırmak için şu satırı ekleyebilirsiniz:

Kod:
*/15 * * * * cd /home/kullanici/projeler/rapor && /home/kullanici/projeler/rapor/.venv/bin/python /home/kullanici/projeler/rapor/rapor.py >> /home/kullanici/projeler/rapor/cron.log 2>&1

Buradaki parçaların görevi şöyledir:
  • */15 * * * * ifadesi komutun 15 dakikada bir çalışmasını sağlar.
  • cd ... scriptin beklediği çalışma klasörüne geçer.
  • Tam Python yolu, hangi yorumlayıcının kullanılacağını kesinleştirir.
  • Tam script yolu, cron'un dosyayı doğru konumda bulmasını sağlar.
  • >> cron.log normal çıktıyı günlük dosyasına ekler.
  • 2>&1 hata çıktısını da aynı günlük dosyasına yönlendirir.
cd kullanılması önemlidir. Scriptiniz göreli bir dosya yolu, örneğin veriler/girdi.csv kullanıyorsa bu yol terminalde çalışırken doğru klasöre göre çözümlenebilir; cron ise farklı bir çalışma klasöründe başlayabilir. Mutlak yollar kullanmak veya komuttan önce doğru klasöre geçmek bu belirsizliği giderir.

Sık kullanılan zamanlama örnekleri aşağıdadır:
İhtiyaçCron ifadesiAnlamı
Her 15 dakikada bir*/15 * * * *Her saatin 0, 15, 30 ve 45. dakikalarında
Her saat başında0 * * * *Her saatin 0. dakikasında
Her gün 02.30'da30 2 * * *Her gün saat 02.30'da
Her pazartesi 09.00'da0 9 * * 1Haftanın pazartesi günü saat 09.00'da
Zamanlama satırını kaydettikten sonra tanımlı görevleri görmek için crontab -l komutunu kullanabilirsiniz. Cron satırının kaydedilmiş olması, scriptin başarılı çalıştığını tek başına kanıtlamaz. Başarıyı cron.log dosyasının oluşması, yeni kayıt eklenmesi ve scriptin beklenen çıktıyı üretmesiyle kontrol edin.

Günlük dosyasında hata görürseniz önce komutun tamamını terminalde elle çalıştırın. Elle çalışıyor, cron üzerinden çalışmıyorsa en sık nedenler göreli dosya yolları, eksik ortam değişkenleri, yanlış Python yolu veya dosya izinleridir. Hata mesajını ve çalıştırılan tam komutu birlikte inceleyerek düzeltme yapın.

Windows'ta Görev Zamanlayıcı ile çalıştırma​


Windows'ta Görev Zamanlayıcı'ya doğrudan python script.py yazmak yerine Python çalıştırıcısını program, script dosyasını ise argüman olarak tanımlamak daha güvenlidir. Önce Komut İstemi'nde şu komutla Python yolunu öğrenebilirsiniz:

Kod:
where python

Sanal ortam kullanıyorsanız bunun yerine sanal ortam içindeki Python dosyasının tam yolunu bulun. Görev oluştururken genel sıra şöyledir:
  1. Görevin ne zaman başlayacağını belirleyin: tek sefer, günlük, haftalık veya belirli bir tekrar aralığı.
  2. Eylem olarak program başlatmayı seçin.
  3. Program alanına Python çalıştırıcısının tam yolunu yazın. Örnek: C:\projeler\rapor\.venv\Scripts\python.exe
  4. Bağımsız değişkenler alanına scriptin tam yolunu yazın. Örnek: C:\projeler\rapor\rapor.py
  5. Başlangıç klasörü için scriptin bulunduğu klasörü belirtin veya script içinde mutlak yollar kullanın.
  6. Görevi kaydedin ve zamanını beklemeden el ile çalıştırarak sonucu kontrol edin.
Windows'ta çıktı ve hataları izlemek için scriptin kendi içinde günlük dosyasına yazması veya komut dosyası üzerinden yönlendirme kullanılması gerekir. Örneğin calistir.bat dosyası oluşturup şu içeriği yazabilirsiniz:

Kod:
@echo off
cd /d C:\projeler\rapor
C:\projeler\rapor\.venv\Scripts\python.exe C:\projeler\rapor\rapor.py >> C:\projeler\rapor\cron.log 2>&1

Görev Zamanlayıcı'nda program olarak bu calistir.bat dosyasını seçebilirsiniz. Böylece çalışma klasörü, Python yolu ve günlük yönlendirmesi tek bir yerde tutulur. El ile çalıştırmada günlük dosyası güncelleniyor, zamanlanmış çalıştırmada güncellenmiyorsa görevin hangi kullanıcı hesabıyla çalıştığını, hesabın dosyalara erişim iznini ve görevin çalışma geçmişini kontrol edin.

Zamanlama seçimini neye göre yapmalısınız?​


İşletim sisteminin zamanlama aracı, aynı makinede düzenli çalışan scriptler için genellikle en basit çözümdür. Scriptin bilgisayar veya sunucu açıkken çalışması yeterliyse cron ya da Görev Zamanlayıcı uygun olur. Makine kapalıyken kaçırılan çalışmanın daha sonra telafi edilmesi, görevlerin birbirine bağlanması veya ayrıntılı yeniden deneme kuralları gerekiyorsa yalnızca basit bir zamanlayıcı yeterli olmayabilir.
  • cron: Linux ve macOS'ta hafif, düzenli ve bağımsız görevler için uygundur.
  • Görev Zamanlayıcı: Windows'ta kullanıcı oturumu açılmadan veya belirli olaylara göre görev başlatmak için kullanılır.
  • Python içi zamanlayıcılar: Programın sürekli açık kalması gerekiyorsa düşünülebilir; program kapanırsa veya sunucu yeniden başlarsa zamanlama da durur.
  • Harici görev sistemleri: Birden fazla görev, bağımlılık, yeniden deneme ve ayrıntılı izleme gerektiğinde daha uygun olabilir.
Python içinde while döngüsü ve time.sleep() kullanmak küçük ve sürekli çalışan işlemlerde işe yarayabilir. Ancak bu yöntem, işletim sistemi zamanlayıcısının yerini her durumda tutmaz: süreç kapanırsa, makine yeniden başlarsa veya hata nedeniyle döngü durursa yeni çalıştırmalar gerçekleşmez. Ayrıca uzun süren bir çalışmanın üzerine yeni bir çalıştırma başlatılması çakışmaya yol açabilir.

Çakışmaları ve tekrarlanan çalışmaları önleyin​


Scriptin çalışması, bir sonraki zaman aralığından uzun sürüyorsa iki işlem aynı anda başlayabilir. Aynı dosyayı değiştiren, aynı veriyi gönderen veya aynı kaydı oluşturan scriptlerde bu durum hatalı veya yinelenmiş sonuçlara neden olabilir.

Bunu önlemek için şu kontrolleri uygulayın:
  • Scriptin aynı anda ikinci kez başlatılmasını engelleyen bir kilit mekanizması kullanın.
  • İşlenen kayıtları benzersiz bir kimlikle takip edin; aynı kaydın ikinci kez işlenmesi sonucu değiştirmesin.
  • Çalışma süresini zamanlama aralığıyla karşılaştırın. Örneğin işlem 20 dakika sürüyorsa 5 dakikalık aralık seçmeyin.
  • Hata durumunda tüm işlemi baştan tekrarlamak yerine hangi adımın tamamlandığını kaydedin.
Bir scriptin günlük dosyasına “başladı”, “tamamlandı” ve hata ayrıntılarını yazması, yalnızca dosyanın çalıştırıldığını değil, işlemin hangi aşamada kaldığını da anlamanızı sağlar. Zamanlayıcı geçmişinde başarılı bir görev görünmesi, uygulamanın beklenen veriyi ürettiğini kanıtlamaz; yalnızca işletim sisteminin komutu başlattığını gösterebilir. Asıl kontrolü scriptin çıktısı, günlük kaydı veya hedef sistemde oluşan sonuç üzerinden yapmalısınız.

Çalışmıyorsa şu sırayla kontrol edin​


Önce zamanlayıcıya verdiğiniz komutun tamamını terminalde veya Komut İstemi'nde çalıştırın. Hata burada da oluşuyorsa Python kodunu, bağımlılıkları, dosya yollarını ve yetkileri düzeltin. Elle çalışıyor ancak zamanlanmış çalıştırmada başarısız oluyorsa şu bilgileri karşılaştırın:
  1. Kullanılan Python yorumlayıcısının tam yolu.
  2. Scriptin ve kullandığı dosyaların tam yolu.
  3. Çalışma klasörü.
  4. Ortam değişkenleri ve sanal ortam.
  5. Görevi çalıştıran kullanıcı hesabının dosya, ağ ve veritabanı erişimi.
  6. Normal çıktı ve hata çıktısının yazıldığı günlük dosyası.
  7. Sunucunun veya bilgisayarın görev saatinde açık olup olmadığı.
Her çalıştırmada yeni günlük satırı oluşmuyorsa görev hiç başlamıyor olabilir. Günlük satırı oluşuyor ancak beklenen sonuç oluşmuyorsa script çalışmış, fakat uygulama içinde hata almış veya giriş verisini bulamamış olabilir. Bu durumda hata çıktısındaki ilk anlamlı istisnayı ve ilgili dosya yolunu inceleyin; yalnızca son satırdaki genel “görev başarısız” bilgisini yeterli kanıt olarak kabul etmeyin.

Gerekirse zamanlamayı geçici olarak daha sık bir aralığa alıp kısa bir test yapın, ardından gerçek aralığa geri dönün. Test tamamlandıktan sonra deneme günlüklerini temizleyebilir veya ayrı bir günlük dosyasına yönlendirebilirsiniz. Son yapılandırmada Python yolu, script yolu, çalışma klasörü ve günlük konumu açıkça belirlenmiş olmalıdır.

Sık sorulan sorular​

Script bilgisayar kapalıyken çalışır mı?​

Hayır. Cron, Görev Zamanlayıcı veya Python içindeki döngü, çalışacağı makinenin açık ve ilgili işletim sistemi hizmetlerinin çalışır durumda olmasına ihtiyaç duyar. Bilgisayar kapalıyken kaçırılan görevin sonradan çalışıp çalışmayacağı kullanılan zamanlama aracının ayarlarına bağlıdır; bunu varsayılan davranış olarak kabul etmeyin.

Cron görevim çalışıyor görünüyor ama dosya oluşmuyor; neden?​

En yaygın neden yanlış çalışma klasörüdür. Scriptte göreli dosya yolu kullanılıyorsa cron farklı bir klasörden başlamış olabilir. Komutta cd ile doğru klasöre geçin veya dosya yollarını mutlak olarak yazın. Ardından normal çıktı ve hata çıktısını bir günlük dosyasına yönlendirerek gerçek hata mesajını inceleyin.

Python scriptini her dakika çalıştırmak doğru mudur?​

Yalnızca işlem süresi kısa ve aynı anda ikinci bir çalıştırma başlamayacaksa uygundur. Script bir dakikadan uzun sürebiliyor veya dış sisteme veri gönderiyorsa çakışma ve yinelenen işlem riski vardır. Bu durumda aralığı uzatın ya da kilit ve tekrar işleme denetimi ekleyin.

Zamanlayıcıda neden sanal ortamdaki paketler bulunamıyor?​

Zamanlayıcı sistemdeki farklı bir Python yorumlayıcısını kullanıyor olabilir. Sanal ortamı etkinleştirmeye güvenmek yerine sanal ortamın tam Python yolunu komutta belirtin. Ayrıca scriptin kullandığı ortam değişkenlerini zamanlayıcı işlemi için ayrıca tanımlayın; terminal oturumunuzdaki değişkenlerin otomatik olarak aktarılacağı garanti edilmez.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic