我有一些需要運行的基於 Python 的伺服器,並希望它們在我啟動 Ubuntu 伺服器時自動啟動。像這樣執行它們的最佳方法是什麼?
我希望我可以編寫一個 Bash 腳本並使用 Screen 讓它們在後台運行,這樣我就可以時不時地檢查它們,但是作為
echo screen -d -m python
工作得很好,
echo screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`
沒有,沒有錯誤訊息。這跟空間有關係嗎?即使我確實用反引號包圍它?我也嘗試過:
WEB="screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`"
echo $WEB
作為逃離空間的一種方式,但運氣不佳。 Bash 腳本執行此操作的方法是什麼?
而且,一旦 Bash 腳本起作用,我可以將其放在哪裡以使其在啟動時執行?
答案1
它失敗是因為sudo
提示輸入密碼。由於沒有打開 TTY,它只是在等待您輸入 TTY,或者實際上可能會立即失敗。如果您以 root 身份運行它,則無需以 sudo 身份啟動它。
然而,您可能想要做的是改變tornadoDeploy.py以守護自身——也就是說,分離自身,以便它不以打開的會話運行。這python-daemonize 函式庫提供了簡單的工具來幫助您做到這一點。這消除了處理螢幕的麻煩,同時仍然允許您守護進程。
答案2
放
sudo -n python /home/matt/tornadoServer/tornadoDeploy.py &
進入檔案/etc/rc.d/rc.local。或您的發行版的任何等效內容。
假設您的腳本是一個行為良好的守護進程,並且您已將 sudo 設定為運行腳本時不需要密碼。
讀這關於啟動腳本和這關於 python 守護程式庫。另外,你不需要運行龍捲風嗎在真正的 http 伺服器後面?
答案3
Ubuntu(和 Debian)讓應用程式在啟動時啟動的方法是使用 update-rc.d 將它們轉換為系統服務 - 請參閱此處的說明:http://www.debuntu.org/how-to-manage-services-with-update-rc.d
請記住,以 root 身分運行的任何內容都是潛在的安全漏洞,特別是如果其他使用者可以修改它。
答案4
如果從 rc.local 執行它,您也需要編輯 /etc/sudoers 並註解此字串:
預設值要求