2017-09-05 32 views

回答

1

默認情況下,您從遠程shell執行的任何操作都會將其組頭設置爲shell的組長,因此I/O將按預期工作。

對於從主節點啓動的進程,它們的組長已經被設置,所以他們的I/O將不會被重定向到遠程shell。您可以使用Process.group_leader/2來設置進程的組長,例如:Process.group_leader(pid, Process.group_leader()),它將設置組長爲pid爲當前進程的組長。您可以配置Logger的:console後端也可以使用Logger.configure_backend(:console, [device: Process.group_leader()])重定向到您的shell。之後,所有的控制檯記錄器輸出應該被定向到遠程shell。

請謹慎操作。如果您在一個會產生大量輸出的應用程序上執行此操作,那麼您可能會出現超負荷組長的風險,這可能會導致其崩潰,並因此嘗試寫入它的任何內容 - 並且在您在遠程節點上分配組長。我建議只在實驗時或者在開發過程中這樣做。在生產中,無論如何你都應該把日誌寫入文件中,而通過ssh被動地尾尾處理這些日誌要比將記錄器的組長改爲遠程shell更安全 - 特別是如果你在不改變組長的情況下殺死你的shell背部;這將導致任何試圖寫入組長的進程崩潰。在更改過程之前,您還需要小心保存過程的組長,以便確保將其更改回正確的過程。

+0

啊,那裏有一些很棒的音符,我沒有想到。 –

相關問題