web-dev-qa-db-ja.com

OpenSuse12.1のinittabにアイテムを追加します

現在、起動時にプログラムが読み込まれるようにinittabに追加する必要のあるプロジェクトに取り組んでいます。

私が始めようとしているプログラムはc#モノラルアプリケーションです。開始スクリプトを作成しました。開始スクリプトを手動で実行すると、プログラムは正常に起動します。ただし、inittabに入れると、プログラムが起動しません。

チェックインしました/var/log/messagesしかし、それは何かが間違っているというわけではなく、それがリロードしていると言うだけです。

以下は、inittabスクリプトに追加したものです。

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

あなたが提供できるあらゆる助けをありがとう

[〜#〜] update [〜#〜]以下は、/ 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を実行すると、開始されず、ログは書き込まれませんが、プログラムを手動で起動すると、ログが書き込まれます。

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

7
Boardy

問題は単純です。従来の System Vブートシステム の代わりに sessystemd であるOpenSuse12.1を使用しています。

新しいサービスの場所をインストールするには、/ 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

サービスセクションへ。

4
Ulrich Dangel

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

/ etc/init.d/skeletonにあるinitジョブ制御用のスケルトンテンプレートファイルをコピーして編集します。

このファイルを変更して、必要なランレベルを示します...この例では、2、3、4、5が必要です。ファイルの上部(コメント内)に、必要なランレベルを示すオプションがあります。

この新しいファイルをわかりやすい名前で/ etc/init.dに配置します。 (myfancyname例で使用)

これをテストする、または有効/無効にするプラットフォームにとらわれない方法(skeletonファイルを使用した場合)

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

これらの同じアクションを実行するためのディストリビューション固有のメソッドがあります。たとえば、Debianはupdate-rc.d myfancyname [start | stop | enable | disable ...]

Inittabの変更は一般的にa badアイデアです。それを台無しにすると、システムは起動しなくなり、その後、 2つの問題が発生しました。 (正規表現は必要ありません!)

/etc/init.d/サブディレクトリへのスクリプトの追加はより標準化されており、ほぼすべてのLinuxフレーバー、おそらくいくつかの* nix、おそらくいくつかのbsdで使用できます。

6
lornix

telinit qを実行して、initに/etc/inittabをリロードするように指示する必要がありますが、自動的には実行されません。システムログでRe-reading inittabメッセージ(このメッセージは表示されましたか?)について言及しているので、これを行ったと思います。

プロセスがまったく起動しない、または起動中にプログラムが失敗するという問題はありますか?エラーをログファイルにリダイレクトするラッパースクリプトを記述します。

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

ログファイルが作成されているかどうかを確認し、エラーが表示されていないかどうかを確認します。

頭に浮かぶのは、プログラムでセッションに設定されている環境変数が必要になる場合があるということです。 initプロセスの環境は非常に限られています。必要に応じて、ラッパースクリプトを変更して、必要なすべての変数を設定します。

initCommandを読み取ってinittabで実行すると、シェルをフォークし、Commandをパラメーターとしてexecコマンド。したがって、手動で行うとどうなるかを確認してください。

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

私が試みるもう1つのことは、inittabで次のようなものを使用して、ランチャースクリプトを完全にバイパスすることです。

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