• ベストアンサー

apacheの起動について

Linuxに最新版のapacheを1.3.33を入れました。 うまく動作しているのですが少し疑問に思ったので質問させてください。 RedHatなのでもともとapacheが/etc/httpdにはいっていたのを今後の為通常の/usr/local/apacheにしました。 起動する際、 /usr/local/apache/bin/apachectr start としたのですが、よくある /etc/init.d/httpd start とか書いている場合もあるのですがこの二つの違いはなんなんでしょうか? 単純に/etc/httpdのapacheは/etc/init.d/httpd start で/usr/local/apacheのapacheの場合/usr/local/apache/bin/apachectr start で起動するということですか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

そもそもLinuxのソフトはいろいろな人が作っているため、起動/停止方法は元来一つ一つバラバラです。 しかし、それだとマシン起動時の自動起動や、停止のことを考えると使いにくいので、sysv方式の起動停止スクリプト(/etc/rc.d/init.d/httpdとか)を誰かが考えました。 /etc/rc.d/init.d/sendmailや/etc/rc.d/init.d/httpdは、sendmailを作った人やapacheを作った人が作ったスクリプトではなく、Red Hat を使いやすくしようと考えた人が後で作ったスクリプトです。こうした努力によっていろいろなソフトウェアが同じような書式で起動停止できるようになっているわけです。 二つの違いとは、 /usr/local/apache/bin/apachectl start ←もともとのapacheの正当な起動方法。 /etc/rc.d/init.d/httpd start ← Red Hat用に誰かが作ったapacheの起動スクリプト。rcと連動しており何かと便利。 ということになります。 (ちなみに「/etc/init.d/httpd start ← Debian用に誰かが作ったapacheの起動スクリプト」です) よって「/etc/rc.d/init.d/httpd start』は基本的にはRed Hatと一緒に配布されているRPM形式のapacheと一緒でないとうまくうごきません。単に/usr/local/apacheにapacheを入れた後で、/etc/rc.d/init.d/httpdを実行してもapacheは起動しません(たぶん)。 ですから、volvo850loveさんが今の環境でもし/etc/rc.d/init.d/httpd startでapacheを起動したいのであれば、/etc/rc.d/init.d/httpdをつくらなければいけません。別にその書式で起動したくないのであれば、つくらなくても結構です。 #Volvo 850 昔乗ってました

volvo850love
質問者

お礼

>/etc/rc.d/init.d/sendmail >や/etc/rc.d/init.d/httpdは、sendmailを作った人や >apacheを作った人が作ったスクリプトではなく、Red >Hat を使いやすくしようと考えた人が後で作ったスク >リプトです。 そうだったんですね。RedHat用だったのですか!!勉強になります。 現在apacheは2つ存在していて /usr/local/apache /etc/httpd/ です。/usr/local/apache/bin/apachectl start をすると/usr/local/apacheのほうが起動し、 /etc/init.d/httpd start だと以前のapacheが起動しました。 ですから /etc/rc.d/init.d/httpdに。/usr/local/apache/bin/apachectlをコピーしたら/etc/rc.d/init.d/httpdで新しいapacheが起動するようになりました。 非常にわかりやすい説明でした。 ありがとうございました。 #volvo850はもう5年のってますがいい車です。最近エンジンがやばいですが・・・

その他の回答 (5)

  • interplay
  • ベストアンサー率39% (108/273)
回答No.5

ANo.1で回答したInterplayです。 まず。。 >K15とかS85って・・・なんでしょうか Kは「KILL」の略でSは「START」の略です。そのままプロセスをKILLしたりSTARTさせると言う意味で、その後の番号は順番です。 例えばapacheよりtomcat(サーブレットコンテナ)を早く起動させておかなければならない場合は、Sのあとの番号をtomcat起動用シンボリックリンクより後の番号へ競ってしなければなりません。 一番良い例はNFS先のディレクトリをSambaで共有させる場合など、起動と終了の順番がNFSとSambaでテレコになるとデッドロックします。一般的には/etc/ini.d/httpdに書かれている番号であれば、殆どのシステムで影響無い順番とされているため、デフォルト値がS85のK15となっています。 例えばSambaだと(・etc/init.d/smbd) #!/bin/sh # # chkconfig: 345 91 35 ランレベル3,4,5で適用され、Sは91でKは35でシンボリックリンクされます。ここwchkconfigは読み取っています。 システムにあわせてこの値はカスタマイズをする為です。 商用サーバでこのあたりまで気を配ってカスタマイズすることは一般的ですが個人レベルのサーバでは表面上の問題がなければ触らないのが普通かもしれません。 それからbashなりBシェルの読み方を覚えなければご質問者様の疑問は晴れる事がないでしょう。。 /etc/init/d/httpdで書かれているスクリプトの意味を理解できるよう、勉強してみてください。それが疑問を晴らす唯一の解です。 キーワードは 1.シェルの意味を理解する。 2.ランレベルについての知識を深める 3.chkconfigやntsysv(redhatだけですか)の利用方法を理解する。 以上です。少々突き放した回答となってしまいましたが、真の意味を理解するにはこれしか方法が無いと思われます。頑張ってください。

volvo850love
質問者

お礼

なるほど。たいへんわかりやすいご説明ありがとうございます。 シェルについてはやはりしっかり勉強すべきだと常々おもっております。 linuxのこの奥の深さがたまらなくおもしろいのでわくわくします。 最近はさらにコマンドなどそのほかlinux関連の書籍を購入しております。 失礼かもしれませんがInterplayさんはこういったことをどこで勉強されたのでしょうか?

  • katope007
  • ベストアンサー率10% (1/10)
回答No.4

>#cp /usr/local/apache/bin/apachectl /etc/init.d/httpd にするということはこれは複製するということは /usr/local/apache/bin/apachectl = /etc/init.d/httpd ということは /usr/local/apache/bin/apachectl start /etc/init.d/httpd start は同じことでは? 結果は同じだと思います。 >K15とかS85って・・・なんでしょうか たしかKは停止、Sは起動されるもので、番号はシステムが適当につけるものだったとおもいます。 それか、重複しなければ勝手につけてもいいのでは? 設定は確か、chkconfigでしたような。ぱっと検索して、それなりに出てきたURLをつけておきます。 多分、結果はいっしょだけど、起動の方法が最初の、スタートアップと自分で起動するの違いだと思うのですが。

参考URL:
http://www.jp.redhat.com/manual/Doc72/RH-DOCS/rhl-cg-ja-7.2/chkconfig.html
  • katope007
  • ベストアンサー率10% (1/10)
回答No.3

>ということは、再起動した時に自動的にapacheが起動するようにするコマンドのことですか? でもそれでしたら、chkconfigでランレベルを変更しておけばいけますよね? 多分、/etc/init.d/httpdと別に、/etc/rc5.d/httpdとかrcの後ろにランレベルの数字がついた場所があるかと思います。再起動したときは、実際はrc5.dの中が起動されると思います。私はDebianなので、少し違うかもしれませんが。そこにhttpdを入れるか、ランレベルを変えると、ここの初期デーモン(?)が変わるので注意されたほうがいいと思います。 http://www.a-yu.com/net/apache02.htmlを見ました。 手作業でインストールすると、/etc/init.d/httpdは自分で作らないと、毎回自分で起動することになるから、httpdを作りましょうと読めました。vi でhttpdの中身を見てみると、あーっと思うと思いますよ。シェルスクリプトだと思うので。中でapachectrを起動させてませんかね?場所を移動させると、もしかするとhttpdを修正しないといけないかもと思います。(自信ないですが。)

volvo850love
質問者

補足

#cp /usr/local/apache/bin/apachectl /etc/init.d/httpd にするということはこれは複製するということは /usr/local/apache/bin/apachectl = /etc/init.d/httpd ということは /usr/local/apache/bin/apachectl start /etc/init.d/httpd start は同じことでは? # cd ../rc1.d/ # ln -s /etc/init.d/httpd K15httpd はシンボリックリンクを作るというここですがコレの意味はすこしわかりづらいです。 K15とかS85って・・・なんでしょうか

  • katope007
  • ベストアンサー率10% (1/10)
回答No.2

/etc/init.d/httpd start は Windowsでいうスタートアップ apachectr startは普通にプログラムを実行すると考えてみては?

volvo850love
質問者

お礼

http://www.a-yu.com/net/apache02.html のApache の起動というところでその2つが同じような意味におもえるのです・・ 最初に書いたように、 /etc/httpd/と/usr/local/apache両方にapacheがインストールされている場合、/etc/init.d/httpd start したらどっちが起動しますか? ちょっとずれた質問かもしれませんが、そのレベルでわからってないもんですから。。

volvo850love
質問者

補足

ということは、再起動した時に自動的にapacheが起動するようにするコマンドのことですか? でもそれでしたら、chkconfigでランレベルを変更しておけばいけますよね?

  • interplay
  • ベストアンサー率39% (108/273)
回答No.1

$ less /etc/init.d/httpd で見てみてください。理由がわかります。 それからここの配下には似たようなデーモンの起動スクリプトがあると思います。 これらはランレベルによってどの様に起動されるかを/etc/rc.d/配下でシンボリックリンクされてます。 登録方法はchkconfigで登録・削除とランレベル条件を設定可能です。(手でスクリプトに書いても良いですが) また、ntsysvを使ってデーモンの起動・未起動を設定することも出来ます。 以下URLのデーモン制御あたりをご覧下さい。

参考URL:
http://quox.org/tips/linux/redhat.html
volvo850love
質問者

補足

うーーん、すみません、わからなかったです。 /usr/local/apache/bin/apachectr start /etc/init.d/httpd start との違いがどうもわからない

関連するQ&A