- Konu sahibi
- #1
İşletim sistemine göre Python scriptini arka planda çalıştırmanın yolu değişir. Linux ve macOS'ta terminal komutunun sonuna
Scriptin bulunduğu klasörde terminali açın ve önce normal çalıştırarak hata olmadığını kontrol edin:
Komut hata vermeden çalışıyorsa
Buradaki
Çalışan işlemi görmek için şu komutu kullanabilirsiniz:
Günlüğü anlık izlemek için:
İş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
Sadece
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:
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:
İşlemi durdurmak için listelenen işlem kimliğini kullanın:
İş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 bir servisin sürekli çalışması, hata sonrası yeniden başlatılması ve sistem açıldığında otomatik başlaması gerekiyorsa
Dosyayı kaydettikten sonra servis tanımını yükleyip başlatın:
Durumu görmek için:
Servis
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.
Konsol penceresi açılmadan çalışan basit bir script için Python kurulumundaki
Gerçek Python kurulum yolunu ve script yolunu yazın.
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:
Yöntem seçimi scriptin ne kadar süre çalışacağına ve yeniden başlatma gerekip gerekmediğine bağlıdır.
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
Scriptin tek seferlik bir işlem mi yoksa sürekli çalışan bir program mı olduğunu belirleyin. Tek seferlik işlem için
& 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.
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öntem | Kontrol |
|---|---|---|
| Geçici olarak terminalden arka plana almak | & | İşlem listesi ve log dosyası |
| Terminal kapansa da çalıştırmak | nohup | pgrep ve log dosyası |
| Sunucuda sürekli servis çalıştırmak | systemd | systemctl status ve servis günlüğü |
| Windows'ta konsolsuz çalıştırmak | pythonw.exe | Scriptin kendi log dosyası |
| Windows'ta otomatik başlatmak | Görev Zamanlayıcı | Görev geçmişi ve script çıktısı |
/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.