UNIX的なアレ:gihyo.jp出張所

第6回知っておきたいApacheの基礎知識 その2

前回は、Apacheの基本的なインストールから立ち上げまでを紹介してきました。今後、起動中のサーバで設定変更をしたときなどどのようにしてApacheを再起動すればよいのでしょうか?

今回は、Apacheの起動scriptの使い方を中心に説明していきます。

Apacheの起動スクリプト

前回の記事で少し使用しましたが、Apacheには起動用スクリプトが同梱されています。

以下がApacheの起動用スクリプト「apachectl」の内容です。Usageが表示されるので、実際に実行してみます。

 apachectlの実行
$ /usr/local/apache2/bin/apachectl 
Usage: /usr/local/apache2/bin/httpd [-D name] [-d directory] [-f file]
                                    [-C "directive"] [-c "directive"]
                                    [-k start|restart|graceful|stop]
                                    [-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
  -D name           : define a name for use in  directives
  -d directory      : specify an alternate initial ServerRoot
  -f file           : specify an alternate ServerConfigFile
  -C "directive"    : process directive before reading config files
  -c "directive"    : process directive after reading config files
  -e level          : show startup errors of level (see LogLevel)
  -E file           : log startup errors to file
  -v                : show version number
  -V                : show compile settings
  -h                : list available command line options (this page)
  -l                : list compiled in modules
  -L                : list available configuration directives
  -t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
  -S                : a synonym for -t -D DUMP_VHOSTS
  -t                : run syntax check for config files

さて、いろいろとオプションがありますが、まず確実に把握しておきたいのが起動・停止・再起動に使用をするオプションです。

起動・停止などは上記のスクリプトに引数を渡して使用をするようにします。下記の4つは確実に覚えておくようにしましょう。

Apacheの起動に使用
${APACHE_HOME}/bin/apachectl start
Apacheの停止に使用
${APACHE_HOME}/bin/apachectl stop
Apacheの再起動に使用
${APACHE_HOME}/bin/apachectl restart
Apacheの再起動に使用
${APACHE_HOME}/bin/apachectl graceful

 {APACHE_HOME}は適宜ご使用している環境に合わせて読み替えてください。

Apacheの起動と停止

それでは、/usr/local/apache2/logs/error_logを見ながらstart・stopをしてみます。

ここでは、2つのターミナルを起動して、片方でtailをしながら実行をします。便宜上、それぞれターミナル1、ターミナル2という名前で説明します。まず、ターミナル1でApacheの起動をしましょう。ターミナル2がtail側です。

ターミナル1
$ sudo /usr/local/apache2/bin/apachectl start
ターミナル2
$ tail -F /usr/local/apache2/logs/error_log 
[Mon Oct 10 00:00:00 2008] [notice] Apache/2.0.63 (Unix) DAV/2 configured -- resuming normal operations

起動時のメッセージが表示されましたね。これで正常に起動しています。

それではApacheを停止します。

ターミナル1
$ sudo /usr/local/apache2/bin/apachectl stop
ターミナル2
$ tail -F /usr/local/apache2/logs/error_log 
[Mon Oct 10 00:00:00 2008] [notice] caught SIGTERM, shutting down

これでApacheが正常に停止されました。psでApacheのプロセスがなくなっているかも確認をしてください。

Apacheの再起動

さて、次は再起動について説明をしていきます。

上記でも説明をしましたが、Apacheには再起動の方法が大きく分けて2種類あります。

それぞれ長所・短所があるので把握をしておきましょう。

restart
ユーザからリクエストを受けているプロセスも含め、すべてをkill(停止)してから起動をさせます。そのため、ユーザからの接続が遮断される可能性があります。
graceful
ユーザからのリクエストを受けた後、レスポンスまでがすべて完了してから、再起動します。ユーザからの接続が強制的に遮断されることはありません。ただし、一部の設定が反映されないことがあります。

では、こちらも2つのターミナルを使ってerror_logを確認してみます。まずはrestartからです。

ターミナル1
$ sudo /usr/local/apache2/bin/apachectl restart
ターミナル2
$ tail -F /usr/local/apache2/logs/error_log 
[Mon Oct 10 00:00:00 2008] [notice] SIGHUP received.  Attempting to restart

正常にrestartが実施されました。

続いて、gracefulを実行します。

ターミナル1
$ sudo /usr/local/apache2/bin/apachectl graceful
ターミナル2
$ tail -F /usr/local/apache2/logs/error_log 
[Mon Oct 10 00:00:00 2008] [notice] Graceful restart requested, doing restart

このメッセージが表示されれば正常にgracefulが実行されています。

このように、Apacheのオペレーション時には、error_logを見ながら実行をするようにしてください。その際、自分の期待しているメッセージがerror_logに出るかをしっかりと確認するようにしましょう。

トラブルシューティング

Apacheを起動した際、下記のようなエラーメッセージが表示されることがあります。

この場合はどのように対処したらよいのでしょうか?

$ sudo /usr/local/apache2/bin/apachectl start
 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
 no listening sockets available, shutting down
 Unable to open logs

このメッセージは、Apacheが使用しようとしたportが使えなかった場合に帰ってくるメッセージです。この場合では、すでに80番が他のプログラムで使用しているというケースが想定されます。このときは、まずlsofというコマンドを使用して対象となるプログラムを特定します。

$ sudo lsof -i:80
 COMMAND  PID     USER   FD   TYPE DEVICE SIZE NODE NAME
 apache2 2692     root    3u  IPv4   6753       TCP *:www (LISTEN)
 apache2 2695 www-data    3u  IPv4   6753       TCP *:www (LISTEN)
 apache2 2697 www-data    3u  IPv4   6753       TCP *:www (LISTEN)

これで80番portを使用しているプロセスのPIDが特定できましたね。

このように特定のportを使用しているプロセスを調べるときは、lsofコマンドが便利です。

まとめ

今回はおもにApacheの起動・停止・再起動の方法について説明をしてきました。

実際に今回説明をした4つのコマンドはどれも多用することになりますますので、しっかりと覚えるようにしてください。

さて、次回からはhttpd.confの記述方法に入っていく予定です。

おすすめ記事

記事・ニュース一覧