• ベストアンサー
  • 困ってます

apacheの起動について

  • 質問No.1237460
  • 閲覧数15532
  • ありがとう数4
  • 回答数6

お礼率 59% (39/66)

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
  • ベストアンサー

ベストアンサー率 100% (3/3)

そもそも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

お礼率 59% (39/66)

>/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年のってますがいい車です。最近エンジンがやばいですが・・・
投稿日時:2005/03/09 21:22

その他の回答 (全5件)

  • 回答No.5

ベストアンサー率 39% (108/273)

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

お礼率 59% (39/66)

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

ベストアンサー率 10% (1/10)

>#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をつけておきます。

多分、結果はいっしょだけど、起動の方法が最初の、スタートアップと自分で起動するの違いだと思うのですが。
  • 回答No.3

ベストアンサー率 10% (1/10)

>ということは、再起動した時に自動的に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

お礼率 59% (39/66)

#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って・・・なんでしょうか
投稿日時:2005/02/27 11:50
  • 回答No.2

ベストアンサー率 10% (1/10)

/etc/init.d/httpd start は Windowsでいうスタートアップ

apachectr startは普通にプログラムを実行すると考えてみては?
補足コメント
volvo850love

お礼率 59% (39/66)

ということは、再起動した時に自動的にapacheが起動するようにするコマンドのことですか?
でもそれでしたら、chkconfigでランレベルを変更しておけばいけますよね?
投稿日時:2005/02/27 01:17
お礼コメント
volvo850love

お礼率 59% (39/66)

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

ベストアンサー率 39% (108/273)

$ less /etc/init.d/httpd

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

お礼率 59% (39/66)

うーーん、すみません、わからなかったです。
/usr/local/apache/bin/apachectr start
/etc/init.d/httpd start
との違いがどうもわからない
投稿日時:2005/02/27 01:07
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ