Mario

WFN Üye
Konular
622
Mesajlar
622
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
İşletim sistemine göre Python scriptini arka planda çalıştırmanın yolu değişir. Linux ve macOS'ta terminal komutunun sonuna & ekleyebilir, terminal kapansa da sürmesini istiyorsanız nohup veya systemd kullanabilirsiniz. Windows'ta ise pythonw.exe ile konsolsuz çalıştırma ya da Görev Zamanlayıcı ile otomatik başlatma tercih edilir. Her yöntemde scriptin çıktısını bir günlük dosyasına yönlendirmek, çalışıp çalışmadığını anlamanızı sağlar.

Linux ve macOS'ta terminal arka planı​


Scriptin bulunduğu klasörde terminali açın ve önce normal çalıştırarak hata olmadığını kontrol edin:

Bash:
python3 script.py

Komut hata vermeden çalışıyorsa Ctrl+C ile durdurup arka planda başlatabilirsiniz:

Bash:
python3 script.py > script.log 2>&1 &

Buradaki & işlemi arka plana gönderir. > script.log standart çıktıyı, 2>&1 ise hata çıktısını aynı günlük dosyasına yazar. Komut tamamlandığında terminal genellikle bir işlem numarası gösterir; bu, scriptin başlatıldığı anlamına gelir ancak scriptin sorunsuz çalıştığını tek başına kanıtlamaz.

Çalışan işlemi görmek için şu komutu kullanabilirsiniz:

Bash:
ps aux | grep script.py

Günlüğü anlık izlemek için:

Bash:
tail -f script.log

İşlem listede görünüyorsa script çalışıyor olabilir; kesin kontrol için günlüğe yeni çıktı yazılıp yazılmadığına ve scriptin kendi beklenen işini yapıp yapmadığına bakın. İşlem sona ermişse ps çıktısında görünmez. Bu durumda script.log dosyasının son satırlarını inceleyerek hata mesajını bulun.

Terminal kapandıktan sonra çalışmaya devam etmesi​


Sadece & kullanmak, terminal oturumu kapandığında işlemin sonlandırılmasına neden olabilir. Terminalden bağımsız çalışması gereken bir script için nohup kullanın:

Bash:
nohup python3 /home/kullanici/proje/script.py > /home/kullanici/proje/script.log 2>&1 &

Dosya yollarını kendi scriptinizin gerçek konumuyla değiştirin. Mutlak yol kullanmak, scriptin farklı bir çalışma klasöründen başlatıldığında dosya bulamama sorununu önler. Script başka dosyalar okuyorsa, kod içinde de mutlak yol kullanmanız veya çalışma klasörünü açıkça belirlemeniz gerekebilir.

Başlatma işleminden sonra günlüğü kontrol edin:

Bash:
tail -f /home/kullanici/proje/script.log

Günlükte beklenen çıktı varsa işlem en azından başlatılmıştır. Ancak log dosyasının oluşması scriptin sürekli çalıştığı anlamına gelmez; işlem daha sonra hata verip durmuş olabilir. Bunu kontrol etmek için:

Bash:
pgrep -af script.py

İşlemi durdurmak için listelenen işlem kimliğini kullanın:

Bash:
kill ISLEM_NUMARASI

İşlem normal şekilde durmazsa zorla sonlandırma gerekebilir; bunu yalnızca scriptin dosya yazma veya veri işleme sırasında olmadığından emin olduğunuzda kullanın.

Sunucuda sürekli çalışacak script için systemd​


Sunucuda bir servisin sürekli çalışması, hata sonrası yeniden başlatılması ve sistem açıldığında otomatik başlaması gerekiyorsa systemd daha uygun bir çözümdür. Örneğin /etc/systemd/system/python-script.service dosyasına şu yapıda bir servis tanımı yazılabilir:

Kod:
 [Unit]
Description=Python scripti
After=network.target

[Service]
Type=simple
User=kullanici
WorkingDirectory=/home/kullanici/proje
ExecStart=/usr/bin/python3 /home/kullanici/proje/script.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

User alanında scripti çalıştıracak gerçek kullanıcıyı, WorkingDirectory alanında proje klasörünü ve ExecStart alanında Python ile scriptin tam yollarını kullanın. Servisi root yetkisi isteyen işlemler yapmayan normal bir kullanıcıyla çalıştırmak, gereksiz yetki verilmesini önler.

Dosyayı kaydettikten sonra servis tanımını yükleyip başlatın:

Bash:
sudo systemctl daemon-reload
sudo systemctl enable --now python-script.service

Durumu görmek için:

Bash:
systemctl status python-script.service

Servis active (running) görünüyorsa süreç çalışıyor demektir. Bu ifade scriptin görevini doğru yaptığına dair kesin kanıt değildir; uygulamanın kendi çıktısını da kontrol edin. systemd günlüklerini görmek için:

Bash:
journalctl -u python-script.service -f

Servis sürekli yeniden başlıyorsa bu genellikle scriptin açılışta hata verip kapandığını gösterir. Günlükteki ilk Python hata mesajını, kullanılan Python yolunu, çalışma klasörünü, ortam değişkenlerini ve dosya izinlerini kontrol edin.

Windows'ta arka planda çalıştırma​


Konsol penceresi açılmadan çalışan basit bir script için Python kurulumundaki pythonw.exe kullanılabilir. Komut İstemi'nde örnek kullanım şöyledir:

Kod:
C:\Python\pythonw.exe C:\projeler\script.py

Gerçek Python kurulum yolunu ve script yolunu yazın. pythonw.exe konsol göstermediği için hata mesajlarını ekranda göremezsiniz. Bu nedenle script içinde günlük dosyasına yazma veya çalıştırma komutunda çıktı yönlendirme gibi bir kayıt yöntemi bulunmalıdır. Aksi durumda script başlamış gibi görünse bile hata nedeniyle hemen kapanabilir.

Scriptin bilgisayar açıldığında veya belirli bir kullanıcı oturum açtığında otomatik çalışması gerekiyorsa Windows Görev Zamanlayıcı kullanılabilir. Görev oluştururken temel olarak şu bilgileri tanımlayın:
  • Çalıştırılacak program: Python yorumlayıcısının tam yolu; konsol penceresi istenmiyorsa pythonw.exe.
  • Bağımsız değişken: Scriptin tam yolu ve gerekiyorsa script parametreleri.
  • Başlangıç klasörü: Projenin çalışma klasörü; script göreli dosya yolları kullanıyorsa özellikle gereklidir.
  • Tetikleyici: Oturum açma, sistem başlangıcı veya belirli bir zaman.
Görev oluşturulduktan sonra elle çalıştırıp görev geçmişini ve scriptin günlük dosyasını kontrol edin. Görev başarılı şekilde başlatılmış görünse bile Python programının hemen kapanmış olması mümkündür; gerçek sonucu log dosyası ve scriptin ürettiği çıktı gösterir.

Hangi yöntemi seçmelisiniz?​


Yöntem seçimi scriptin ne kadar süre çalışacağına ve yeniden başlatma gerekip gerekmediğine bağlıdır.
İhtiyaçUygun yöntemKontrol
Geçici olarak terminalden arka plana almak&İşlem listesi ve log dosyası
Terminal kapansa da çalıştırmaknohuppgrep ve log dosyası
Sunucuda sürekli servis çalıştırmaksystemdsystemctl status ve servis günlüğü
Windows'ta konsolsuz çalıştırmakpythonw.exeScriptin kendi log dosyası
Windows'ta otomatik başlatmakGörev ZamanlayıcıGörev geçmişi ve script çıktısı
Arka planda çalıştırmadan önce scripti aynı kullanıcıyla ön planda deneyin. Ön planda çalışan ancak arka planda hata veren scriptlerde en sık nedenler farklı çalışma klasörü, farklı Python sürümü, etkin olmayan sanal ortam, eksik ortam değişkeni veya dosya izinleridir. Sanal ortam kullanıyorsanız servis ya da görev tanımında sistem Python'u yerine sanal ortamın yorumlayıcısını belirtin; örneğin /home/kullanici/proje/.venv/bin/python.

Scriptin tek seferlik bir işlem mi yoksa sürekli çalışan bir program mı olduğunu belirleyin. Tek seferlik işlem için nohup yeterli olabilir; sürekli çalışan ve hata durumunda yeniden başlaması gereken bir sunucu scripti için servis yöneticisi kullanın. Her iki durumda da günlük kaydı olmadan yalnızca pencerenin kapanmasına veya komutun geri dönmesine bakarak scriptin başarıyla çalıştığı sonucuna varmayın.
 

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