在 OpenSuse 12.1 上將項目新增至 inittab

在 OpenSuse 12.1 上將項目新增至 inittab

我目前正在開發一個項目,需要添加該項目inittab以便程序在啟動期間加載。

我嘗試啟動的程式是 ac# mono 應用程式。我已經建立了一個啟動腳本,如果手動執行啟動腳本,則程式可以正常啟動。但是,當我將其放入inittab該程式時,該程式無法啟動。

我已經檢查過了,/var/log/messages但沒有說有什麼問題,只是說正在重新加載。

以下是我添加到inittab腳本中的內容

bes:2345:respawn:/home/bits/MyProgram/start.myprogram

感謝您的任何幫助,您可以提供

更新 以下是位於 /home/bits/MyProgram 中的啟動腳本中的程式碼。

#!/bin/sh

cd /home/bits/MyProgram

/usr/bin/mono EmailServer.exe "$@"

我還嘗試將 > mylog.txt 添加到以 /usr/bin/mono 開頭的行的末尾,例如

/usr/bin/mono EmailServer.exe "$@" > mylog.txt

如果我手動執行啟動腳本,即使我不在啟動腳本所在的目錄中,它也可以正常工作,只是當我將其添加到inittab 並運行telinit q 時,它永遠不會啟動,並且不會寫入日誌,但是如果我手動啟動程序,日誌確實會被寫入。

感謝您的任何幫助,您可以提供。

答案1

把你的程式放在某個地方。

複製並編輯位於下列位置的初始化作業控制的框架範本檔案:/etc/init.d/骨骼

修改此文件以指示您想要哪個運行級別...在您的示例中,您想要 2,3,4,5,文件頂部(在註釋中)有選項來指示所需的運行級別

將這個新文件放入/etc/init.d具有描述性名稱。 (我的名字範例中使用)

與平台無關的方法來測試這一點,或啟用/停用(如果您使用骨骼文件)

sudo /etc/init.d/myfancyname start
sudo /etc/init.d/myfancyname stop
sudo /etc/init.d/myfancyname restart

有特定於發行版的方法來執行這些相同的操作,例如,Debian 使用update-rc.d myfancyname [開始|停止|啟用|停用...]

修改inittab為一般來說A壞的想法,如果你搞砸了,系統將不再啟動,然後你會遇到兩個問題。 (不需要正規表示式!)

將腳本新增至 /etc/init.d/ 子目錄更加標準化,可以與幾乎任何 Linux 風格一起使用,可能是一些 *nix 的,也可能是一些 bsd 的。

答案2

問題很簡單,您使用的是 OpenSuse 12.1用途 系統而不是你的經典System V開機系統

若要安裝新的服務位置,請在 /etc/systemd/system/myprogname.service 中建立以下文件

[Unit]
Description=My progname service file

[Service]
ExecStart=/home/bits/MyProgram

[Install]
WantedBy=multi-user.target

之後運行systemctl daemon-reloadsystemctl start myprogname.service

如果你想自動重新啟動 MyProgname 你必須加入

Restart=restart-always

到服務部分。

答案3

您需要運行telinit q來告訴 init 重新加載/etc/inittab,它不會自動執行此操作。我認為自從您Re-reading inittab在系統日誌中提到該訊息(您確實看到了此訊息,對吧?)以來,您已經這樣做了。

問題是您的進程根本沒有啟動,還是您的程式在啟動過程中失敗了?編寫一個包裝腳本,將錯誤重定向到日誌檔案:

#!/bin/sh
exec >/var/log/myprogram.log 2>&1 
exec /home/bits/MyProgram/start.myprogram

檢查日誌檔案是否已創建,並查看其中是否出現任何錯誤。

我想到的一件事是您的程式可能需要在會話中設定環境變數。該init過程的環境非常有限。如有必要,修改包裝器腳本以設定所有需要的變數。

答案4

init讀取一個命令要執行 in inittab,它會分叉一個 shell 並發送命令exec作為該 shell 中命令的參數。因此,檢查一下如果您手動執行會發生什麼:

sh -c exec /home/bits/MyProgram/start.myprogram

我會嘗試的另一件事是完全繞過啟動器腳本,在 inittab 中使用類似以下內容:

bes:2345:respawn:/usr/bin/mono /home/bits/MyProgram/EmailServer.exe "$@"

相關內容