2012-11-24 20 views
0

我有一個長期運行的Python程序,我試圖在遠程服務器上運行。試圖通過SSH持久化進程失敗

我看過"How to keep processes running after ending ssh session?"," How to start process via SSH, so it keeps running?","Run a persistent process via ssh",和其他一些話題,但他們似乎沒有幫助。

我試着運行與screen蟒蛇進程(通過一個分離含screen後臺進程)和nohup,但在這兩種情況下,當我退出SSH會話(這 - 我不知道這事 - 由於python程序正在創建一些圖形,所以運行X11轉發),ssh會話掛起。

的SSH過程中掛起,即使我重定向stdinstdoutstdout自/至/dev/null。 殺死ssh會話會殺死python進程。當我殺了SSH,下面的錯誤信息被打印在遠程服務器上:g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting.

而且,我真的不希望stdoutstderr重定向到/dev/null,因爲我想將它們重定向到一個日誌文件。所以我沒有嘗試將python進程作爲守護進程運行。 (也許是壞的記錄發送到stdout,我猜...)

我應該怎麼做,這樣我可以:(1)把我的進程退出運行後,(2)重定向stdout/stderr到一個日誌文件?

(其中有一點是「合作」已暫停,然後重新運行SSH進程[它掛起後,在後臺,但如果我要關閉我的電腦?)

+4

如果您的程序實際需要X11服務器,您可以考慮使用['xpra'](http://xpra.org/)而不是'screen'。 –

+0

ssh掛起,但是你想要堅持的程序會發生什麼? – Raber

+0

當ssh掛起時,沒有任何反應。如果我殺死ssh(通過'Ctrl-c'或'〜.'),python程序也會死掉。 我會看看'xpra'。 – jiangty

回答

2

X11連接確實是問題所在。屏幕保持stdin/stdout/stderr連接,並且它還保護程序免受HUP信號影響。但是,它不保留一個虛擬X服務器來讓它寫圖形。

所以問題是:你想要什麼圖形?如果您的程序確實需要輸出它們,您需要設置一個(虛擬)X服務器,即使在連接丟失後它仍可以繼續訪問。您可以使用vnc連接到此虛擬服務器,就像您可以連接到您的屏幕會話一樣。

或者你可以讓程序更適合在後臺運行,這意味着它不能使用X服務器。在這種情況下,您可能希望輸出一些文件,然後當您想要查看它們時,可以使用單獨的程序將其轉換爲圖形。

0

我想sshd的創建新的會話因爲如果你把你的編程器放在後臺並重定向你的日誌(> log 2> & 1),那麼即使你失去連接,正在運行的bash也會控制你的程序。

相關問題