[英]How Do I Run a Python Script from Mac's Spotlight (Instead of Having to Open Terminal or Pycharm)?
[英]How do I detach python script run from Pycharm so it keeps appending to files?
我正在使用遠程系統,我使用Pycharm遠程窗口來編輯和運行我的腳本。
我登錄使用
ssh -Y myName@myMachine
然后我從終端運行Pycharm。
我想以這樣的方式從Pycharm運行我的腳本,如果我關閉它(甚至可能從ssh會話注銷),進程仍然會運行。
我試圖使用選項“分離而不終止進程”退出Pycharm。 這導致python進程顯示在以下列表中:
ps -all
但是,它會停止寫入文件。 當pycharm打開時,進程通常每隔幾秒就寫入一個文件。 當從pycharm分離時,它會在進程列表中顯示(在注銷和再次登錄之后它會在ps -x中顯示未知的tty),但是它會停止工作,因為它不再將任何輸出附加到它通常應該的文件。
可能導致什么呢? 我怎樣才能解決這個問題?
有幾種方法:
使用終端仿真器作為tmux
和screen
:
tmux
- tmux是一個終端多路復用器,可以從一個屏幕創建,訪問和控制多個終端。 tmux會話可以從屏幕上分離並繼續在后台運行,然后重新連接。 與屏幕工具類似,您也可以使用tmux從SSH會話中分離而不退出遠程作業。
安裝tmux后,使用以下命令啟動tmux會話:
$ tmux
現在,開始你的任務或工作。 然后通過按“CTRL-b”,然后按“d”,安全地從tmux會話中分離而不退出遠程作業。 這將分離你的tmux會話,但會讓你在后台運行該會話。 這意味着即使您與會話斷開連接,所有遙控器也將運行。
要列出可用會話,請運行:
$ tmux ls
您可以使用相應的會話ID重新連接到tmux會話,如下所示:
$ tmux attach -t <會話ID>
有關更多詳細信息,請參閱手冊頁。
$ man tmux
screen
- 屏幕工具,帶有VT100 / ANSI終端仿真的全屏窗口管理器,允許您在不退出遠程作業的情況下安全地從SSH會話中分離。 對於使用多個遠程服務器的人來說,它會很有幫助。
在遠程系統上安裝屏幕后,啟動屏幕會話:
$ screen
屏幕會話現已開始。 現在運行您想要在遠程系統上執行的任何工作或任務,然后按“Ctrl-A”,然后按“d”退出屏幕會話,從屏幕會話中分離后,您可以從遠程系統注銷系統。 遠程作業將繼續在服務器中運行。
要列出屏幕會話,請運行:
$ screen -ls
您可以使用相應的會話ID重新連接到屏幕會話,如下所示:
$ screen -r <會話ID>
有關更多詳細信息,請參閱手冊頁。
$ man screen
使用在后台執行的分離命令([read also] [6]):
nohup
- 代表No h ang up ,是另一個命令行實用程序,即使在您斷開SSH會話后也可以幫助您運行Linux命令。
用法非常簡單。 登錄遠程系統后,您所要做的就是:
$ nohup <command>&
現在,您可以退出SSH會話。 遠程作業將繼續運行。
要列出正在運行的作業,請運行:
$ jobs -l
有關更多詳細信息,請參閱手冊頁。
$ man nohup
disown
- Disown,從系統的進程作業列表中刪除作業,這樣可以防止進程在會話斷開連接時被終止,因為當你注銷時shell不會收到SIGHUP。
登錄到遠程系統后,使用“&”運行命令:
$ <command>&
然后列出正在運行的作業,使用:
$ jobs -l
然后使用進程ID運行disown,如下所示:
$ disown -h <PID>
您現在可以斷開與服務器的連接
有關更多詳細信息,請參閱手冊頁。
$ man nohup
setsid
- setsid為正在執行的進程分配一個新的進程組,因此,創建的進程完全在新分配的進程組中,可以安全地執行,而不用擔心即使在會話注銷后也會被殺死。
登錄遠程系統后,運行:
$ setsid <command>
有關更多詳細信息,請參閱手冊頁。
$ man nohup
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.