2015-11-27 126 views
0

我是python的新手,對Linux有很基本的瞭解。在Ubuntu上啓動時啓動python腳本

我需要在啓動時在Ubuntu 14.04.3服務器上啓動腳本。

唯一的是,腳本是一個監控工具,應該一直運行,所以我不能只是一個定期的cron調用。

,我發現這個起初:running a python script with cron

我試圖在crontab中添加此:

@reboot python /path/to/script.py & 

而且也是這樣:

@reboot /path/to/script.py & 

,但它不似乎工作。

我也看到了這一點:How to make a python script run like a service or daemon in linux

主要答案是的cron或Python代碼的變化。

所以我的問題是:有沒有另一種方式來在啓動時運行我的腳本,並讓它運行「永久」而無需更改代碼?

我向你保證,如果我不想改變代碼,它不是懶惰,但我會如果它是唯一的選擇。

其他信息(不知道是否有必要),我運行Windows並通過PuTTY訪問服務器。 的Python的版本是2.7

UPDATE

這裏是cron的日誌:

Nov 27 15:57:03 trustyovh cron[760]: (CRON) INFO (pidfile fd = 3) 
Nov 27 15:57:03 trustyovh cron[798]: (CRON) STARTUP (fork ok) 
Nov 27 15:57:03 trustyovh cron[798]: (CRON) INFO (Running @reboot jobs) 
Nov 27 15:57:03 trustyovh CRON[807]: (administrateur) CMD (/home/administrateur/scuMonitor/main.py &) 
Nov 27 15:57:03 trustyovh CRON[800]: (CRON) info (No MTA installed, discarding output) 
Nov 27 16:09:01 trustyovh CRON[1792]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime)) 

這裏是crontab中:

@reboot /home/administrateur/scuMonitor/main.py & 

更新2

嗯,它實際上與cron集合重新啓動,但是,我的腳本並沒有把他的日誌放在我期望的位置(我不理解Linux上的路徑是如何工作的)。

感謝所有人的回答!

+0

詳細說明「但它似乎不工作。」 - 你有沒有檢查過,如果cron發送給你任何錯誤?檢查過cron日誌嗎? 另外,從cron條目扔掉&符。 –

+0

@MichałF不,我沒有那樣做,我在哪裏可以找到日誌和錯誤? – erjon

+0

它可能是/ var/log/syslog,或者如果您的系統配置不同,它可能是專用於cron的文件。試試'sudo grep -R CRON/var/log |頭'來檢查哪些日誌文件包含來自CRON的條目。 –

回答

3

摘自Run Python script at startup in Ubuntu。 您可以通過將其添加到/ etc/init目錄來在Ubuntu上啓動服務。

將這個在/ etc /初始化

mystartupscript.conf

start on runlevel [2345] 
stop on runlevel [!2345] 

exec /path/to/script.py 

據我所知,以保持它檢查你想它來檢查是什麼都的唯一途徑在代碼/守護進程中實現一個循環。

+0

我確實在代碼中放了一個循環!當我自己啓動它時,它確實有效。 – erjon

+0

@erla在這種情況下,您可能需要檢查我在答案中添加的啓動腳本^^ –

+1

它沒有工作,但感謝您的答案! – erjon

3

我建議你,我已經寫here

基本上同樣的事情,你可以使用systemd,所有你所要做的就是寫一個<your-app-name>.service文件運行Python代碼作爲一種服務,像下面

的一個
[Unit] 
Description=Some kind of description 

[Service] 
Type=simple 
ExecStart=<path to your bin with args if needed> 

然後,保存在/etc/systemd/system/下。要檢查是否一切正常,運行

sudo systemctl start <your-app-name> 

然後

sudo systemctl status <your-app-name> 

最後運行

sudo systemctl enable <your-app-name> 

,該服務將在每次系統啓動時執行。

+0

這不是壞建議,但不能解決原始問題:-) –