私の使命は、起動時にプロセスを開始することです(終了前に実行していた場合)。これを達成するために、/etc/init.d/halt.local
プロセス状態をファイルに保存するコマンドを追加しました。
では、/etc/inittab
ファイルを読み取り、記録された状態に応じてプロセスを開始するコマンドを追加しました。しかし、このプロセスはまだ発生していません。終了すると、ステータスが正しく記録され、/ etc / inittabに追加された他のコマンドは正しく実行されますが、目的のコマンドではないことがわかります。
inittabに追加されたもの:
ec1:235:once:/bin/echo "Started..." > /tmp/pankaj3.txt
rly:235:once:/bin/su - user -c '[[ `head -1 /tmp/pankaj/.status` == STARTED ]] && { /opt/my_user/bin/ctrl.sh start ; }'
端末でコマンドを実行すると正常に動作します。出力は次のとおりです
SS-01:~ # /bin/su - user -c '[[ `head -1 /tmp/pankaj/.status` == STARTED ]] && { /opt/my_user/bin/ctrl.sh start ; }'
[07-10-2015] 10:33:00 ctrl.sh[18008]: Management Process started.
inittabに追加された別の行を実行しますec1:235:once:/bin/echo "Started..." > /tmp/pankaj3.txt
。
何が間違っているのかを理解するのに役立ちます。
答え1
SUSE Linux ES 11は、従来のSystem V initシステム(sysvinit)を使用しているようです。 Seuss初期化プロセス|
あなたは見ることができます個人初期化テーブル(5)文法文書化に使用されます。
まず、inittab
リダイレクトや複合コマンドなどのシェル機能はサポートされておらず、シェルでのみサポートされます。最初のコマンドが機能すると言ったが、これはその理由ではないことを示している。
次に、デフォルトでsu
実行され、サポートされて/bin/sh
いない可能性があります[[
。
第三に、その中のファイルは/tmp
通常起動中に削除されるため、/tmp/pankaj/.status
終了時に作成した場合、再起動後はほとんど存在しません。ファイルが存在することを確認してください。
とにかく別のinitスクリプトを作成し、予想されるシェルを行として(または何でも)入れて、#!
レベル2、3、および5で実行する必要があります。/etc/init.d/pankaj
chkconfig
これSUSE管理ガイドの初期化スクリプトセクション始めるためのいくつかのヒントがあります。
最後に、以前にサービスが実行されていた場合は、起動時にサービスを再起動したい場合はそうしないでください。 chkconfig
起動時に起動を設定するための標準ツールです。システムの他のすべてのサービスはそれを使用します。 1つのサービスが異なる動作をしている場合、状況は混乱するだけです。