web-dev-qa-db-ja.com

Windows Server上のApache 2.2:すべてのデータとログのドライブ文字を変更しようとした後、起動しません

Windows Server 2008で実行されているWebサーバーを64ビット仮想ホストとして管理しています。すべてのサービスソフトウェアは独立して実行されており、AMPスタックの一部としては実行されていません。データドライブがほぼいっぱいになり、システム管理者が新しい仮想ドライブをより多くの容量でプロビジョニングしました。私の仕事は、古いボリュームから新しいボリュームにすべてをコピーすることです。

ボリュームを作成するとき、同じボリュームタイプ、ファイルシステム、ブロックサイズなどで作成されていることを確認しました。すべての関連サービス(Apache、MySQL、どちらもrun C:から)を停止しました。データはすべてD:にあり(ログを含む)、すべてのファイルがコピーされます。

ここからは、サービスを新しいボリュームに依存させるために2つの異なるアプローチを試し、古いものを忘れます。 MySQLはどちらの方法でも問題はありませんが、Apacheはどちらの方法でもサービスとしてを開始できません。システムイベントログに表示される内容は次のとおりです。

Apache2.2サービスは、サービス固有のエラー、不正な関数で終了しました

error.logには何も表示されません。

まず、ドライブ文字を変更してみました。私は古いD:を取り、それを任意のものに変更し、D:を新しいボリュームに割り当てました。これにより、上記のエラーが発生しました。 「念のため」に新しいドライブ指定でサーバーを再起動してみましたが、同じエラーが発生しました。 Windowsのマウントポイントを完全には理解していないため、ドライブ文字を元のドライブ文字に戻し、Apacheサービスが正常に開始することを確認しました。

次に、ApacheとMySQLのすべての構成ファイルを単に更新してみました。 "D:"(大文字と小文字を区別しない)はすべてF:(新しいドライブ文字)に変更されました。私は設定ファイルをよく知っているので、すべての出現を見つけました。上記のエラーがまったく同じ方法で再び発生しました。 Webサーバーを再び稼働させるために、すべての変更を元に戻し、サービスを正常に開始しました。

私が収集したいくつかの詳細情報:

  • コマンドラインからサービスとしてnotを開始すると、httpd.exeは正常に実行されます。構文エラーはありません。
  • コマンドラインから実行した場合でも、Apacheはnotをサービスとして開始します(httpd.exe -k runservice)。
  • 問題はおそらくファイルアクセス許可の1つではありません。キーの場所(いくつかのディレクトリ、ログファイル)をスポットチェックしたところ、アクセス許可は同じでした。しかし、私はこれを徹底的にテストしませんでした。

私が持っているnotのテストの1つは、データとログの場所の1つだけを新しいドライブに移動し、他のドライブはそのままにしておくことです。それが違いを生むとは思わなかった。

...とはいえ、ここで何が起こっているのか実際にはわかりません。ログファイルとデータの場所を変更しただけでは、Apacheがサービスとしての実行に失敗する理由は考えられません。

この件についての提案やアドバイスはありがたいです。提案に応じてさらに調査させていただきます。前述のようにアイテム(ログまたはデータ)の1つだけを移動する価値があると思う人がいる場合は、それを試してみます。同様に、私が早急に割引の許可を与えたと思われる方がいたら、私はより徹底的な調査を行います。

どんな入力でも大歓迎です!私はすべてのアイデアを使い果たしました。

7
nmjk

翌日、サーバーの主要な機能を無効にするために割り当てられた時間枠内で、私は何か新しいことを試してみて、問題を解決することになった新しい考えがありました!詳細は以下のとおりです。

最初の質問から2番目のアプローチを繰り返すことから始めました。サービスを停止し、すべてのファイルを再コピーして(最終日の変更をキャッチするため)、ApacheおよびMySQL構成ファイルを編集して、新しいドライブ(F :)を指すようにしました。 Apacheでも同じエラーが発生することを確認しました。私はすでに設定ファイルを開いているので、私は最初に試していないものを試してみることにしました(そして本当に持っているべきです):

  • 古いドライブ(D :)を指すように、構成ファイルをリセットして元の状態に戻しました。
  • ログファイルへの参照のみを新しいドライブ(F :)に更新し、Apacheサービスをテストしました。以前と同じエラーです。
  • ログファイルの参照をD:に返し、データ参照をF:に更新しました-IT WORKED!繰り返しますが、私は本当にこれを昨日試してみるべきでした。このステップから学んだことは、問題となっているのはログファイルだということです。
  • ファイルが2つしかないため(access.logおよびerror.log)、許可の変更を強制しました:読み取り専用(念のため)を追加/削除し、Apacheユーザーがディレクトリおよびファイル自体への再帰的な書き込みアクセス権を持っていることを確認しました。
  • Fへのログファイル参照の更新:-以前と同じエラー。
  • 直感的に、2つのログファイルの名前を変更し(ログファイルをローテーションするための一般的な手法)、サービスを開始しようとしました。元のファイル名の新しいバージョンが表示されることを期待していたのですが、実際にはそうでした。サービスが正常に開始されました!勝利!!

私が学んだこと:実際、私は完全にはわかりません。調査のさまざまな手順を十分に行わなかった場合、問題のあるファイルハンドルなどが疑われますが、再起動後にそれがどのように行われるのかわかりません。ただし、問題のトラブルシューティング中にnotの可能性をすぐに却下することの値を確認しました。質問で述べたように、今日の問い合わせの行程が違いを生む可能性が高いとは思いませんでしたが、なぜそうなったのかはまだわかりません!しかし、結果について議論することはできません。

結論:私の問題は解決されましたが、理由はわかりません。誰かが理論を持っている場合は、それを共有してください!

3
nmjk

ドライブ文字を変更すると問題が発生する理由がわかりません。しかし、エラーThe service terminated with service-specific error Incorrect function Windowsサービスの通常の原因は、物理RAMの不足です。

Apacheドキュメントの最小システム要件を確認し、必要に応じて、不要なプログラムを閉じてみてください。

2
Massood Khaari

WSGIPythonHomeを使用してmod_wsgiで同じ問題を見つけました。 nmjkの回答から、権限を確認することに決め、ApacheユーザーにはWSGIPythonHomeディレクトリに対する権限がないことに気付きました。適切な権限を追加した後、Apacheは正常に起動しました。

おそらく、構成で指定されたすべてのパスのアクセス許可を再確認し、問題の原因となっているパスを特定するためにパスを含む構成を1行ずつコメントアウトする価値があります。

1
user193130

私の問題は同じで、ログフォルダーを新しいドライブに移動しました。 error.logファイルの名前変更に関する指示に従い、Apacheを起動しようとしましたが、同じエラーで失敗しました。 Windows 10マシンを再起動すると、Apacheが正常に起動しました。

0
Hondymon