Python Uygulamasını Arka Planda Çalıştırmanın İki Yolu

Python uygulamasını linux bilgisayarda bir sefer çalıştırmak istiyorsanız:

python myscript.py

demeniz yeterli olacaktır. Python uygulamanızı çalıştıracak, iş bitince programdan başarılı bir şekilde çıkacaktır. 
Fakat uygulamanızın sürekli çalışmasını da isteyebilirsiniz. Mesela bir rest servisini periyodik olarak dinlediğinizi ve gelen veriye göre işlem yaptığınızı düşünelim.

Bu durumda programın sürekli çalışmasını sağlamanız gerekecek. Fakat terminalden çıktığınız zaman, otomatik olarak uygulamanız durdurulacak ve işleminiz yarım kalacaktır. 

Terminalden çıksak bile programınızın arka planda çalışmaya devam etmesini sağlamanın iki yolu var. 

nohup komutu

Linux/Unix sistemlerde kullanılan nohup komutu ile shell veya terminalden bağımsız olarak uygulamanı arka planda çalıştırma imkanına kavuşursun. 

nohup python myscript.py &

Yukarıda belirtmiş olduğum komut (sonundaki & işaretini unutmayın) ile python uygulamamız arka planda çalışır. Shell veya terminal bağlantısını kapatsanız dahi uygulama arka planda çalışmaya devam eder.

unix/linux ps komutu ile uygulamanın gerçekten çalışıp çalışmadığını görebilirsiniz.

ps -aux | grep python

nohup komutu kullanıldığında standart çıktı nohup.out isimli bir dosyaya yazılır. nohup.out dosyasına bakarak programın çıktısını inceleyebilirsin. Eğer başka bir dosyaya yazılmasını isterseniz bunu da belirtebilirsiniz:

nohup python myscript.py > output.log &

Yukarıdaki örnekte standart çıktıyı output.log dosyasına yazdırıyorum.

Systemd servis yapısını kullanmak

Nohup komutunun bir dezavantajı var. Eğer bilgisayar çökerse ya da bilgisayarı restart etmek durumunda kalırsanız uygulama tekrar başlatılmayacaktır. Bu durumda tekrar shell bağlantısı açıp nohup komutunu çalıştırmanız gerekecektir. 
Daha sağlam ve kararlı bir çözüme gitmek isterseniz systemd mekanizmasını kullanabilirsiniz.

Systemd, linux sistemlerde standart olarak gelen bir servis yöneticisi sistemidir. System açılışında (boot) sırasında çalışacak prosesleri systemd sayesinde yönetebilirsiniz. Bu yönüyle windowslardaki servis yapısını linux üzerinde sağlamaya imkan sağlıyor. 

Hangi editör’ü kullanıyorsanız, /etc/systemd/system dizini içerisinde service uzantılı bir dosya oluşturuyorsunuz.

sudo nano /etc/systemd/system/mypython.service 

Komutu çalıştırdıktan sonra aşağıdaki gibi mypython.service dosyasını değiştirin:

[Unit]
Description=my python service
After=network.target
  
[Service]
Type=simple
LimitNOFILE=65536
ExecStart=/usr/bin/python /scriptin/bulundugu/yer/mypythonscript.py
Restart=on-abort
TimeoutSec=900
  
[Install]
WantedBy=multi-user.target

ExecStart kısmını siz kendi python scriptinize göre değiştirin.

Yeni servis dosyalarını okuması için systemctl komutunu daemon-reload parametresi ile çağırıyoruz:

sudo systemctl daemon-reload

Aktif hale getiriyoruz (enable):

sudo systemctl enable mypython.service

Başlatıyoruz:

sudo systemctl start mypython.service

Herhangi bir hata vermesi durumunda systemctl status komutu ile loga bakabiliriz:

sudo systemctl status mypython.service

Sonuç

İki şekilde python uygulamasını arka planda çalıştırabilirsiniz. Uzun süren işleriniz için nohup komutunu kullanabilirsiniz. Eğer bilgisayarın her açılışında uygulamanın çalışmasını istiyorsanız, systemd yöneticisini kullanabilirsiniz.

Python ile Mail Göndermenin Kolay Yolu

1 düşünce - “Python Uygulamasını Arka Planda Çalıştırmanın İki Yolu”

Yorum Gönder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top