2011-10-18 23 views
7

我在Linux中看過很多用於守護python腳本的腳本,但沒有提供有關如何使用它們的大量信息。任何人都可以引導我呢?在debian中使用virtualenv守護python腳本

我目前有一個冗長的python腳本,用於監聽傳入郵件的套接字,如果它是正確的格式,則接受它並將其存儲到數據庫中。該腳本本身只是打開套接字,然後聽一段時間是真的(這是工作!),並在那裏做所有的工作。

爲了守護它,我需要修改我的當前腳本還是從單獨的腳本調用它?我見過兩個例子,但都沒有工作。

此外,我正在使用virtualenv這可能是我的問題的根源,任何暗示使用這與守護程序腳本?

+0

守護進程只是一個程序/腳本,一直運行,直到事件發生,如果沒有事件發生(或在隊列中),它會睡一段時間......然後重複...... 什麼你在做什麼守護進程。你是否要求在環境中啓動它以便始終運行? – g19fanatic

+0

我需要安裝在virtualenv中供腳本使用的各種東西。我認爲這就是爲什麼我還沒有得到它的工作。另外我怎麼知道它正在運行?我讀過關於調用'ps aux'來顯示一個列表,但我看不到它在那裏。 –

回答

5

創建一個shell腳本來激活虛擬環境,並在後臺運行您的Python腳本。

另外,虛擬環境中應該有一個python模塊,您可以從中導入和激活環境。我目前沒有virtualenv工作,所以我無法檢查它在哪裏,但是在虛擬環境中搜索activate(或類似的東西),您應該可以找到它。

編輯:增加了一個最小的Debian的init.d腳本

啓動一個後臺進程所需要的絕對最小的腳本在計算機啓動時,是這樣的:

#!/bin/sh 
/path/to/program & 

&,使程序運行在後臺,所以它不會停止引導過程的其餘部分。

要獲得更完整的腳本,請複製/etc/init.d/skeleton並編輯新文件。編輯的重要部分是開始處的塊(### BEGIN INIT INFO### END INIT INFO,由update-rc.d程序使用)和NAME,DAEMONDAEMON_ARGS變量。希望這應該是製作啓動腳本所需的全部內容。

激活腳本這樣的:

sudo update-rc.d <name of script> defaults 
sudo update-rc.d <name of script> enable 

,並啓動它:

sudo update-rc.d <name of script> start 

<name of script>僅僅是名稱,而不是完整的路徑。

+0

我有激活文件是的,所以我寫了一個bash腳本?我如何守護它? –

+0

@ ing0:也許你的意思是如何編寫一個在計算機啓動時啓動的腳本,就像/etc/init.d中的所有其他程序一樣?那麼它對你使用的Linux發行版有一點依賴。嘗試'man update-rc.d',如果手冊頁存在,它應該包含關於如何執行的指針。也可以嘗試谷歌'啓動腳本_linuxdist_'。 –

+0

目前使用的是debian的變體,我在網上找到的所有東西都提供了這樣的代碼:http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/這種排序的代碼不需要? –

5
script 
    export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/ 
    exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 & 
end script 

當你需要在Python virtualenv中運行的應用程序,您可以「激活」的virtualenv中,或使用環境的獨特python命令。

根據網站「如果您直接從virtualenv的bin /目錄運行腳本或python解釋器(例如path/to/env/bin/pip或/ path/to/env/bin/python script.py )不需要激活。「 - http://pypi.python.org/pypi/virtualenv

我也有一些從源代碼編譯的python模塊。那些需要在PYTHONPATH環境變量中。這可能是你虛擬環境激活的一部分,使用virtualwrapper完成,或明確調用(如我在下面做的那樣)。

從UPSTART作業調用該程序也適用。我的例子如上。

在Amazon EC2上的Ubuntu 10.10實例上,我更喜歡start-stop-daemon命令。我也與其他一些暴發戶的節奏奮鬥。我正在調用一個特定的virtualenv和一些參數給我執行的程序的python應用程序。

+0

您是否有任何與新貴合作的示例腳本(shell和/或python)?你提到「例子在下面」。 – hobs