私の仕事は、シャットダウン前に実行されていた場合、起動時にプロセスを開始することです。これを実現するために、プロセスの状態をファイルに保存するコマンドを/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 ES11は従来のSystemV initシステム(sysvinit)を使用しているようです。 Suse Doc | initプロセス
構文のドキュメントについては、 man inittab(5) を参照してください。
まず、inittab
は、シェルでのみサポートされているリダイレクトや複合コマンドなどのシェル機能をサポートしていない可能性があります。あなたは最初のコマンドが機能すると言いますが、それは理由ではないことを示唆しています。
次に、su
はデフォルトで/bin/sh
を実行しますが、これは[[
をサポートしていない可能性があります。
第三に、/tmp
内のファイルは通常、起動時に削除されるため、シャットダウン中に/tmp/pankaj/.status
を作成した場合、再起動後にはほぼ確実にそこにありません。そのファイルが存在するかどうかを確認してください。
いずれの場合も、予想されるシェルを#!
行として使用する別のinitスクリプトにし、/etc/init.d/pankaj
(またはその他)に配置して、レベル2、3、およびで実行する必要があります。 5とchkconfig
。
SUSE管理ガイドのInit Scriptsセクション は、それを開始するためのヒントをいくつか提供します。
最後に、以前に実行されていたサービスを起動時に再起動するだけの場合は、実行しないでください。 chkconfig
は、起動時に開始するものを構成するための標準ツールです。これは、システム上の他のすべてのサービスが使用するものです。 1つのサービスの動作を変えると、混乱するだけです。