2010-06-04 149 views

回答

129

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

理想情況下,您可以運行類似supervise的腳本,以便在它死亡時重新啓動它。

+5

當我用nohup和&運行命令時,我得到消息'nohup:忽略 把輸出附加到'nohup.out'' ,當我按下輸入進程時退出狀態爲1.發生了什麼事? – 2013-12-07 15:03:33

+1

讀取nohup.out中的輸出。在我的情況下,這是一個權限問題,我需要使用sudo – mxns 2014-05-06 05:46:00

+0

以及如何在此方法中運行後停止bgservice? – Shaegorath 2018-02-08 10:16:59

5

你可以禁不住,但我更喜歡screen

15

你也可以使用幾乎每個Linux/Unix系統都應該有的GNU screen

如果您在Ubuntu/Debian上,其增強版本byobu也不錯。

+0

謝謝,你做了我的一天:顯然是自從切片面包改良後的最好的事情。 – 2010-06-04 15:45:26

+0

這也是我使用的完全相同的定義:)那麼,我們稱之爲什麼?切片_和烤麪包? ;-) – 2010-06-04 16:18:58

+0

切片,烤,然後在啤酒面糊深炸。 – DataMania 2017-08-17 05:52:08

3

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,我會推薦。

18

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

Ctrl+Z(暫停過程)

bg(重新啓動在後臺

disown %1過程中(假設這是工作#1,使用jobs確定)

9

你可能會考慮把您的蟒蛇腳本合成一個合適的python守護進程,如here所示。

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

如果您在使用python-daemon時遇到問題,還有另一個實用程序supervisor也會爲您執行相同的操作,但在這種情況下,您不必編寫任何代碼(或修改現有代碼),因爲這是超出用於守護程序。

+0

給出一個關於如何解決問題的簡要說明通常是一個好主意。 – 2016-10-08 12:25:01

0

如果您需要的是無論您是否登錄,進程都應該永遠運行,請考慮將該進程作爲守護進程運行。

supervisord是一個很好的開箱即用的解決方案,可用於守護任何進程。它有另一個控制實用程序supervisorctl,可用於監視由主管運行的進程。

您不必編寫任何額外的代碼或修改現有的腳本來完成此工作。而且,詳細的文檔使得這個過程更加簡單。

在python-daemon周圍困擾着我的頭幾個小時後,主管是在幾分鐘內爲我工作的解決方案。

希望這有助於有人試圖讓蟒蛇守護工作

3

下面是一個使用裝飾內部蟒蛇一個簡單的解決方案:

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

+0

也許有必要抓住SIGHUP信號。然後在你的塊中添加signal.signal(signal.SIGHUP,處理程序)。 – Chouettou 2017-01-19 10:01:41

+0

非常好的裝飾。爲我工作得非常好。 – Klik 2017-12-12 10:48:27