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 q
initに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 "$@"