2017-06-14 118 views
-1

從python程序中重新啓動ubuntu系統服務的最佳做法是什麼?該服務負責啓動將從其中調用重新啓動的相同程序。服務腳本具有停止,啓動和重新啓動方法。 stop方法應該終止最初在start方法中執行的正在運行的進程。我一直在python中使用subprocess.call方法,但是程序有一個Flask會話,當我在程序上調用重新啓動時,腳本開始執行,但我得到一個「Address already in use error」,表示該會話尚未結束。在運行Flask會話的情況下從python程序重新啓動服務

類似的問題:Python spawn off a child subprocess, detach, and exit

回答

3

最好的辦法是一個信號(例如SIGTERM)發送到所有進程開始啓動方法。 「地址已在使用中」錯誤可能是由於Flask程序沒有正確關閉引起的。

+0

謝謝,但我已經在stop()方法中使用「pkill」來殺死原始進程。從終端執行服務重啓時,我沒有任何問題。只有當我從運行燒瓶程序的python中調用一個服務重啓時。我會想,因爲subprocess.call產生一個新的進程,它會殺死它被調用的進程,但也許有衝突。 – rigger12

+1

我通常通過讓產生的進程從其父進程中解脫出來來處理這種情況。對我來說,最簡單的方法是運行包裝在shell腳本中的程序,並讓shell將其關閉。 –

+0

謝謝你的建議。我正在考慮用python中的os.fork()來做這件事。 – rigger12

相關問題