こんにちは。きんくまです。
MacにはWebサーバーのApacheが最初から入っています。それで、そのメモです。
OSはlionです。
httpd.confの場所は以下にあります。設定が必要な場合はこれをいじればOKです。
/etc/apache2/httpd.conf
コマンドから起動
apachectlというコマンドがまず関係していて、man apachectlを見ると
NAME apachectl - Apache HTTP Server Control Interface SYNOPSIS When acting in pass-through mode, apachectl can take all the arguments available for the httpd binary. apachectl [ httpd-argument ]
とかなっています。パス通しモードだとhttpdに直接引数伝えるよ。となっているので、man httpdをひきます。httpdという名前はhttpを扱うデーモン(d) だと思われ。
NAME httpd - Apache Hypertext Transfer Protocol Server SYNOPSIS httpd [ -d serverroot ] [ -f config ] [ -C directive ] [ -c directive ] [ -D parameter ] [ -e level ] [ -E file ] [ -k start|restart|graceful|stop|graceful-stop ] [ -R directory ] [ -h ] [ -l ] [ -L ] [ -S ] [ -t ] [ -v ] [ -V ] [ -X ] [ -M ] [ -T ]
長いオプションがあるのですが、今回関係するのは -k と -D のみです。
結論から先にいいますと以下のコマンドでTerminalからサーバーをスタートできます。
sudo使っているので、アカウントのパスワードがコマンド打った後から必要です。
sudo apachectl -D WEBSHARING_ON -k start
ストップしたいときは以下のコマンドです。
sudo apachectl -k stop
それで、WEBSHARING_ONというのはどこからきたかといいますと、
httpd.confの中にIfDefineではじまるWEBSHARING_ONという部分がありまして、
そいつを引っ張る必要があるようです。
このオプションを通せばそこからうまく設定を読みこんでくれるという感じです。
ちなみにGUIからだと
System Preference > Web Sharing
のチェックボックスを有効にしたり、無効にしたりすればOKです。
GUIから起動しているときに、httpdのプロセスを確認してみます。
kinkuma$ ps -ax | grep ht 5958 ?? 0:00.14 /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON 5961 ?? 0:00.00 /usr/sbin/httpd -D FOREGROUND -D WEBSHARING_ON 5996 ttys000 0:00.00 grep ht
こんな感じになっていて、 httpdというプロセスが WEBSHARING_ON というオプションつきで動いているのがわかります。 もうひとつのFOREGROUNDはhttpdのmanを見ると
-D parameter Sets a configuration parameter which can be used withsections in the configuration files to conditionally skip or process commands at server startup and restart. Also can be used to set certain less-common startup parameters including -DNO_DETACH (prevent the parent from forking) and -DFOREGROUND (prevent the parent from calling setsid() et al).
IfDefineのところをスキップするかそのまま進めるかを設定できます。
また-DNO_DETACHだと親からforkするのを防いだり、
-DFOREGROUNDだと親プロセスからsetsid()を呼ばれるのを防ぎます。
と書いてあるんだけど、このあたり今勉強中なのでまだよくわかりません、。
ちなみにコマンドからこの-DFOREGROUNDをつけてhttpdを起動したところ、その間だけコマンドの入力がかえらずに、サーバーが動いている状態になっていて、Ctrl+Cでコマンドを終了するとその場でサーバーも終了というふうになりました。たぶんマニュアルの通り、親からプロセスが切り離されていないためにこういう形になるってことかな?
シェルスクリプト
それで、今回のをシェルスクリプトにしたら便利だよなと思い作ってみました。
myapache
#!/bin/sh starthttpd() { sudo apachectl -D WEBSHARING_ON -k $1 } stophttpd() { sudo apachectl -k stop } if [ $# = 0 ] ; then echo "Usage: myapache [ start | restart | stop ]" elif [ "$1" = "start" ] ; then starthttpd "start" echo "httpd is running..." elif [ "$1" = "restart" ] ; then starthttpd "restart" echo "httpd restarted" elif [ "$1" = "stop" ]; then stophttpd echo "httpd stopped" fi
使い方としては、上の内容のmyapacheというテキストファイルを用意します。
/usr/local/bin
に移動して、実行権をつけます。
chmod 744 /usr/local/bin/myapache
こんな感じになっていれば大丈夫。うまくいかなかったらsudoとかつけてからコマンド入力するといいかも。
kinkuma$ ls -l /usr/local/bin/myapache -rwxr--r-- 1 kinkuma admin 414 Mar 10 04:35 /usr/local/bin/myapache
ここまでで準備完了。
あとはスタートするときは、
myapache start
ストップするときは
myapache stop
再起動するときは
myapache restarrt
とコマンドを打てばOKです。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ