現在、起動時にプログラムが読み込まれるように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を実行すると、開始されず、ログは書き込まれませんが、プログラムを手動で起動すると、ログが書き込まれます。
あなたが提供できるどんな助けにも感謝します。
問題は単純です。従来の 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
サービスセクションへ。
プログラムをどこかに置きます。
/ 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で使用できます。
telinit q
を実行して、initに/etc/inittab
をリロードするように指示する必要がありますが、自動的には実行されません。システムログでRe-reading inittab
メッセージ(このメッセージは表示されましたか?)について言及しているので、これを行ったと思います。
プロセスがまったく起動しない、または起動中にプログラムが失敗するという問題はありますか?エラーをログファイルにリダイレクトするラッパースクリプトを記述します。
#!/bin/sh
exec >/var/log/myprogram.log 2>&1
exec /home/bits/MyProgram/start.myprogram
ログファイルが作成されているかどうかを確認し、エラーが表示されていないかどうかを確認します。
頭に浮かぶのは、プログラムでセッションに設定されている環境変数が必要になる場合があるということです。 init
プロセスの環境は非常に限られています。必要に応じて、ラッパースクリプトを変更して、必要なすべての変数を設定します。
init
がCommandを読み取ってinittab
で実行すると、シェルをフォークし、Commandをパラメーターとしてexec
コマンド。したがって、手動で行うとどうなるかを確認してください。
sh -c exec /home/bits/MyProgram/start.myprogram
私が試みるもう1つのことは、inittabで次のようなものを使用して、ランチャースクリプトを完全にバイパスすることです。
bes:2345:respawn:/usr/bin/mono /home/bits/MyProgram/EmailServer.exe "$@"