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

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

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. 

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.

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:

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.

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

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:

Aktif hale getiriyoruz (enable):

Başlatıyoruz:

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

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

Yorum Gönder

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

Scroll to Top