Solaris で再起動後に起動スクリプトが実行されない

Solaris で再起動後に起動スクリプトが実行されない

Apache を起動するコマンドがありますが、/etc/rc3.dサーバーの再起動時に実行されません。スクリプトの名前は ですS75Apache2。これは、リンク名に大文字の「A」が含まれているためであり、 に名前を変更すれば機能する可能性があると推測する人がいますS75apache2

誰か確認できますか? ドキュメントを検索しましたが、答えが見つかりません。サーバーを再起動せずにこれをテストすることはできません (再起動はしたくありません)。

答え1

Solaris の init スクリプトは面倒です。大文字の A は関係なく、 に/etc/rc.dある 'S' で始まるすべてのファイルを検索し/etc/rc3.d、番号順に実行するスクリプトがあります。

それで、「基本から始める」ということになります。

  1. /etc/rc3.d/S75Apache2セットは実行可能ですか?

  2. そのスクリプトには「#!」行がありますか? その行は正しいですか (印刷されないバイトなどはありません)?

  3. bash または ksh スクリプトの場合は、 として実行しますksh -n /etc/rc3.d/S75Apache2 start。これにより、構文エラーがあるかどうかがわかります。

  4. そのスクリプトを root として実行できる場合は、次のように実行して/etc/rc3.d/S75Apache2 start、スクリプトが開始および停止する/etc/rc3.d/S75Apache2 stop かどうかを注意深く確認してください。少なくとも、スクリプトを 'start' および 'stop' 引数付きで自分で実行してください。 を使用して、実行時にスクリプトが何を行うかを確認します。スクリプトが行う内容が、想定どおりに行われるかどうかを確認します。httpdhttpdset -x

  5. 注意深くお読みください/etc/rc3.d/S75Apache2PATH起動時にまばらにデータが読み込まれるため、スクリプトは起動時に実行可能ファイルがどこにあるか分からない場合がありますが、起動後に実行するとわかる場合があります。あまり想定しすぎないようにしてください。存在すると思われるファイルが存在しない可能性があります。

  6. KnnApache2にスクリプトが存在しないことを確認してください。たとえば、実行レベル 3 から実行レベル 5 に移行すると、/etc/rc3.dSolaris が実行されると思います。initK76Apache2 stop

  7. スクリプトがユーザー ID を適切に変更することを確認します。スクリプトはおそらくapachectl startいくつかのプロローグ コマンドを呼び出すだけなので、Apache にとってはこれは重要ではないかもしれませんが、直接実行する場合は、結果のプロセスに正しいユーザー ID があるhttpことを確認してください。正しく変更するには、スクリプト内で または何かを使用します。httpdsudo

答え2

起動スクリプトにバグがあったことが判明しました。LD_LIBRARY_PATH 変数が適切に設定されていませんでした。スクリプトでそれを定義すれば問題は解決します。

今後の参考のために、問題の解決につながったエラーを含む起動メッセージを含むログ ファイルがあります。ファイルは次のとおりです。

/var/svc/log/milestone-multi-user-server:default.log

/etc/rc3.d/README ファイルでこれに関する参照を見つけました。また一日、また新たな知識が得られます!

答え3

独自の Apache を作成しましたか (つまり、ソース コードからコンパイルしましたか)、それとも Solaris 10 にプリインストールされている Apache をそのまま使用していますか?

まあ、あなたが言うようにSolaris 10(またはそれ以降)を使用している場合は、それはあまり問題ではありませんSolaris initスクリプトは絶対に使用しないでください、SMF を使用する必要があります。(はい、技術的には init スクリプトはまだサポートされていますが、ご指摘のとおり面倒なので、SMF の方がはるかに優れています)

Solaris 10 にプリインストールされている Apache 2.2 Web サーバーを (今すぐ、また再起動後に自動的に) 起動するには、次の操作を実行します。

svcadm enable /network/http:apache2

独自の Apache を展開している場合は、SMF マニフェストを作成し、そのマニフェストをインポートして実行する必要があります。Google で「SMF Solaris」を検索すると、多くのレシピが見つかります。

関連情報