Linux

如何像 Apache 一樣在啟動時將二進製文件設置為 init(作為服務執行)

  • June 14, 2013

我正在嘗試將 PhantomJS 設置為作為服務執行。我在 /etc/init.d 中找到了骨架文件,並且我在 Ubuntu 12.10 上執行。在試圖弄清楚這一點時,我在 /etc/rc*.d 目錄中找到了符號連結,並發現 Apache 在執行級別 2 到 5 上執行。

我的問題是我是否剛剛在 2 到 5 個文件夾中創建了一個名為 S02phantomjs 的符號連結並將其指向我放入 /etc/init.d 的腳本?或者我應該使用一些應用程序來配置它?

我擔心的是我錯過了一些東西。並且其中數字部分的順序非常重要,我不想搞砸。

此外,我不確定是否還有其他事情要做,不僅要確保它在每次啟動時執行。但是現在讓它開始執行。

最後一個問題。我的腳本基於骨架,當我在終端中執行它時,它就像我正常執行 PhantomJS 時一樣坐著等待。我想讓它像 Apache 一樣在後台執行。我必須做些什麼不同的事情才能做到這一點?

謝謝大家!

由於 PhantomJS 不會提供開箱即用的執行守護程序的任何支持,因此您應該自己處理您的服務。很高興您找到/etc/init.d/skeleton並使用它來創建初始化腳本。你所描述的表明你的程序沒有進入後台,這可以通過一些包裝來修復。這可以start-stop-daemon是特定於基於 debian 的發行版的,也可以是可以重定向 stdin/stdout 並處理其他情況的單獨daemon包。

由於我幾乎可以肯定您使用傳統方式編寫初始化腳本,我懷疑您可能只是添加--background到您的 start-stop-daemon 命令。

完成腳本修復後,請檢查您是否擁有root:root權限為 0755(例如rwxr-xr-x)的腳本。update-rc.d在此之後,使用Michael Hampton 在他的回答中提供的命令更新 sysvinit 符號連結。

請注意,還有一些其他工具支持將程序發送到後台,並且在其他情況下可能很有用。例如,supervisorupstartsystemd支持這一點。請參閱他們的文件以獲取確切的語法。如果您要使用其中之一,則無需編寫完整的初始化腳本。

當然,init 腳本是最古老和最受支持的啟動守護程序的方式。

引用自:https://serverfault.com/questions/515949