python - gae - gcp cron yaml



即使在註銷SSH之後,如何在後台運行Python腳本? (6)

zsh shell有一個選項可以使所有後台進程都以nohup運行。

~/.zshrc添加行:

setopt nocheckjobs  #don't warn about bg processes on exit
setopt nohup        #don't kill bg processes on exit

然後你只需要像這樣運行一個進程: python bgservice.py & ,你不再需要使用nohup命令。

我知道沒有很多人使用zsh,但它是一個非常酷的shell,我會推薦。

我有Python腳本bgservice.py ,我希望它bgservice.py運行,因為它是我構建的Web服務的一部分。 即使在註銷SSH之後,我如何才能使其繼續運行?


下面是使用裝飾器的python中的一個簡單解決方案:

import os, time

def daemon(func):
    def wrapper(*args, **kwargs):
        if os.fork(): return
        func(*args, **kwargs)
        os._exit(os.EX_OK)
    return wrapper

@daemon
def my_func(count=10):    
  for i in range(0,count):
     print('parent pid: %d' % os.getppid())
     time.sleep(1)


my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own

當然,您可以替換bgservice.py文件的內容來代替my_func


你可以禁止它,但我更喜歡屏幕


如果您已經啟動了該進程,並且不想在nohup下重新啟動並重新啟動,則可以將其發送到後台,然後拒絕它。

Ctrl+Z (暫停進程)

bg (在後台重啟進程

假設disown %1 (假設這是1號工作,使用jobs來確定)


您可以考慮將您的Python腳本轉換為適當的python守護進程,如此處所述。

python-daemon是一個很好的工具,可以用來運行python腳本作為後台守護進程而不是永遠運行的腳本。 您需要稍微修改現有的代碼,但它很簡單。

如果您在使用python守護進程時遇到問題,還有另一個實用程序supervisor會為您做同樣的事情,但在這種情況下,您不必編寫任何代碼(或修改現有的代碼),因為這是一個開箱即用的守護進程解決方案流程。


運行nohup python bgservice.py &讓腳本忽略掛斷信號並繼續運行。 輸出將被放入nohup.out

理想情況下,你可以像supervise一樣運行你的腳本,以便它可以在(死亡)時重新啟動。





cron