Linux

對 init.d 有更深入的了解——它們可以叫什麼?環境如何?

  • December 21, 2012

我需要一些關於 Linux 上的 init.d 系統的教育(在我的情況下是 Ubuntu 12.04,64 位),我發現了數百個站點(不,我沒有全部查看,但我確實閱讀了其中一些)告訴我如何編寫 init.d 腳本以及如何在 /etc/rc2.d 中創建符號連結。我仍然缺乏理解和製作Google查詢的能力,這些查詢可以讓我得到我需要的答案。所以,

我知道我的 init.d 腳本啟動了。我讓它將日誌消息回顯到一個文件中,因此我知道它正在執行,例如在任何使用者的 .profile 執行之前。問題是,它執行的環境的性質是什麼。發送到 STDOUT 的輸出會發生什麼情況?它會寫入某處的虛擬終端嗎?它有什麼影響嗎?

我實際上想從 init.d 腳本啟動的“程序”是一個 shell 腳本my_shell_script,它包裹著我的真實程序my_program。該腳本設置了一堆環境變數,包括PATHLD_LIBRARY_PATH,然後啟動my_program

我應該修改啟動my_program的行以將其輸出重定向到 /dev/null 嗎?同上 STDERR?發射線是否應該有一個 NULL <1 (或者它是 NULL <&1 ?)所以 STDIN 斷開連接?

在我的 init.d 腳本中,當我想啟動 shell 腳本時,呼叫它的正確方法是什麼?

my_shell_script

或者

. my_shell_script

或者

sh my_shell_script

我應該使用 sh 還是 bash。我想使用使腳本功能所需的一種?即 bash 如果那裡有非 sh bash?

當 init.d 腳本嘗試啟動my_shell_script時,它是否需要在 STDIN、STDERR 和 STDOUT 上執行相同的重定向?

現在,my_program 最初是作為帶有一個圖形視窗的終端啟動程序開發的。主程序啟動圖形視窗,然後啟動兩個 xterms,其中執行著單獨的程序(我不知道為什麼,我繼承了它。)所有三個程序都永遠執行,但不是守護程序:只是無限循環。主程序監視以確保其他兩個正在執行,如果它們碰巧停止,將重新啟動它們。

我啟動的程序應該是守護程序嗎?或者非終止應用程序可以嗎?在my_shell_script rmd的啟動行中,帶有 & 所以腳本可以繼續啟動並返回到 init.d 腳本?

my_program,檢測到圖形視窗可以/沒有啟動(所以我可以 telnet/ssh 進入它執行的伺服器並(重新)啟動它)。如果它沒有執行 GUI 視窗,它會在同一個終端 (telnet) 視窗中啟動另外兩個子程序,並且所有圖形輸出都作為非圖形文本輸出發送到該終端和日誌文件。

當我將 ssh/telnet 連接到我的開發伺服器時,.profile將執行,.profile包含****my_shell_script包含的幾乎所有內容,除了它使用螢幕程序啟動my_program以便從 telnet/ssh 會話註銷不會終止正在執行的my-程序。我需要在 init.d 方案中包裹my_program的螢幕程序嗎?

init.d 時間環境會看起來像一個終端嗎?我假設它看起來像一個執行級別 1 的環境,並且 GUI 視窗無法打開,並且“終端”是唯一的輸出。

最後,停止正在執行的應用程序的最佳方法是什麼?現在,當他們作為使用者應用程序執行時,我使用 killall’s 來阻止他們無法告訴他們關閉自己。

http://upstart.ubuntu.com/cookbook/

Upstart 是 Ubuntu 的初始化系統。食譜應該很有幫助。

如果你想連接到從 init 系統開始的終端,你很可能想試試 tmux。

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