OpenSuse 12.1のinittabにプロジェクトを追加する

OpenSuse 12.1のinittabにプロジェクトを追加する

inittab私は現在起動中にプログラムがロードされるように追加する必要があるプロジェクトに取り組んでいます。

私が始めようとしているプログラムはC#モノラルアプリケーションです。起動スクリプトを作成し、起動スクリプトを手動で実行すると、プログラムは正常に起動します。ところで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 "$@"

また、/usr/bin/monoで始まる行の末尾に> mylog.txtを追加してみました。例:

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

起動スクリプトを手動で実行すると、起動スクリプトがあるディレクトリになくてもうまく機能します。ただし、inittabに追加してtelinit qを実行すると起動されず、ログも記録されません。ただし、プログラムを手動で起動するとログが記録されます。

あなたが提供できる助けに感謝します。

答え1

プログラムをどこかに置きます。

次の場所にある初期化ジョブ制御フレームワークテンプレートファイルをコピーして編集します。/etc/init.d/bones

必要なランレベルを示すようにこのファイルを変更してください。たとえば、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を次に修正してください。一般的に言えば悪い考えると、これを台無しにするとシステムが起動しなくなり、2つの問題が発生します。 (正規表現は必要ありません!)

/etc/init.d/サブディレクトリにスクリプトを追加することはさらに標準化されており、ほぼすべての種類のLinux(* nix、いくつかのbsdなど)で利用できます。

答え2

問題は簡単です。 OpenSuse 12.1を使用しています。使用 システムあなたのクラシックの代わりにシステムVブートシステム

新しいサービスの場所をインストールするには、/etc/systemd/system/myprogname.service に次のファイルを生成します。

[Unit]
Description=My progname service file

[Service]
ExecStart=/home/bits/MyProgram

[Install]
WantedBy=multi-user.target

それから実行してsystemctl daemon-reloadくださいsystemctl start myprogname.service

MyPrognameを自動的に再起動するには、以下を追加する必要があります。

Restart=restart-always

サービスセクションに移動します。

答え3

telinit qinitにreloadを指示するには実行する必要があります/etc/inittabが、自動的には実行されません。Re-reading inittab私はあなたがシステムログのメッセージに言及した後にこれを行ったと仮定します(このメッセージを見たことがありますか?)。

プロセスがまったく起動しないのは問題ですか、それとも起動中にプログラムが失敗するのですか?エラーをログファイルにリダイレクトするラッパースクリプトを作成します。

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

ログファイルが生成され、エラーが表示されていることを確認してください。

覚えておくべき1つのことは、プログラムがセッションで環境変数を設定する必要があることです。このinitプロセスの文脈は非常に限られています。必要に応じてラッパースクリプトを変更して、必要なすべての変数を設定します。

答え4

init読むとき注文する実行すると、inittabシェルをフォークして転送します。注文するexecこのシェルのコマンドの引数として使用されます。したがって、手動で行うとどうなるかを確認してください。

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

私が試したいもう一つの方法は、ランチャースクリプトを完全にバイパスし、inittabで次のようなものを使用することです:

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

関連情報