備忘録
たまに使うけどその度に思い出しきれずに調べなおしてたりするようなこと。
たまに発生する重要度の高いもの。
等を殴り書き。たくさん溜まったら整理すりゃいいか。


たまに使うので忘れ気味なコマンド
ディレクトリに含まれるデータの総容量を知りたい

 du -sch ./*

カレントディレクトリの各(ファイル、)ディレクトリ毎の総データ量取得。

 ./*

がなかったらカレントディレクトリの総合計だけになってしまう。


サーバは落ちていないのにWEBに繋がらない場合の検討事項


●サービスが待機しているかどうか

 netstat -an | less

のコマンドを打って次の二つがあれば起動している

http>   tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
https>  tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN

この両方又は片方が起動していないことにより、接続できなくなっている場合と、この接続数が多くなりすぎて接続できなくなっている場合がある。
接続数が多くなりすぎている場合は、その後に
        tcp        0      0 222.222.22.222:443          111.11.11.111:1041            ESTABLISHED
という感じのものが大量に並んでいる。
●サービスが起動しているかどうか

 ps afx | less

以下のような感じで起動していればOK

29312 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29313 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29314 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29315 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29316 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29328 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29336 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29343 ?        S      0:00  \_ /usr/local/apache/bin/httpd
29320 ?        S      0:00 /usr/local/apachessl/bin/httpsd
29321 ?        S      0:00  \_ /usr/local/apachessl/bin/gcache 99 /usr/local/apachessl/logs/gcache_port
29322 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29323 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29324 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29325 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29326 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29331 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29332 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29335 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29337 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd
29338 ?        S      0:00  \_ /usr/local/apachessl/bin/httpsd

接続が多すぎて固まっている状況では次のように一行だけの状態になってしまっていたりすることがある。

29320 ?        S      0:00 /usr/local/apachessl/bin/httpsd
●サービスを再起動する
※コマンドのパスはOSやサーバ毎の設定で異なっている可能性がある

http /usr/local/apachessl/bin/httpsdctl restart
https /usr/local/apache/bin/apachectl restart
その他 service apache reload
service apache restart
/etc/rc.d/init.d/httpd restart
起動スクリプトの内容次第だが、http 及び https を両方処理してくれるかもしれない。
詳細は環境毎に異なるので確認する必要がある。

また、一度両方を落としてから起動したい場合は
その1 /usr/local/apachessl/bin/httpsdctl stop
/usr/local/apache/bin/apachectl stop

/usr/local/apache/bin/apachectl start
/usr/local/apachessl/bin/httpsdctl start
その2 service apache stop
service apache start
その3 /etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/httpd start


サービスが再起動できない場合の検討事項


サービスが起動できない場合は

1. 古いhttpdまたはhttpsdのサービスが落としきれていないのではないか
2. 古いpidファイルが残っていないか
3. ログファイルが巨大化しすぎていないか
といったことを疑う。

1.サービスを落としきれていない場合
/usr/local/apache/bin/apachectl stop

でうまくサービスを落とせない場合、killコマンドで強制的に落とすことも考える。

  ps afx | less

で httpd または httpsd の pid を調べて、(例:pid=21449)

  kill -kill 21449

とする。

  kill -Q 21449

というような "-Q" というのもあるらしいが情報不足でよくわからない。
kill コマンドで強制終了した場合、“2.古いpidファイルが残っていないか”の対処も行ってサービスを再起動する。
2.古いpidファイルが残っていないか
サービスは落ちているのにまだサービスが生きているかのようなメッセージで起動できない場合、古いpidファイルが残っていることが原因であることがある。

(パス例)
http /usr/local/apache/logs/httpd.pid
https /usr/local/apachessl/logs/httpsd.pid

というようなファイルが存在しているかどうか確認する。
サービスが起動していない状態でも、このファイルがあるとシステムはサービスが起動していると勘違いして、サービスを起動してくれないのでファイルを削除する。
それからサービスを起動しなおしてみると(コレが原因の場合)起動できるようになっている。
サービスのプロセスを強制終了などした場合によく発生する状況である。
3.ログファイルが巨大化しすぎている場合
(パス例)
http /usr/local/apache/logs/access_log
/usr/local/apache/logs/error_log
https /usr/local/apachessl/logs/httpsd_error_log
/usr/local/apachessl/logs/httpsd_access_log

のファイルサイズを確認する。(実ファイルパスは環境次第)
数MBくらいどうということは無いが、数十MB、数百MBとなるにつれてアクセス自体が重くなってきているはず。
GB(ギガバイト)とかまでのサイズになってたらそれが原因で止まっている可能性は高い。
特に、再起動しても起動が出来ていない(又はすぐに止まってしまう)状況では疑わしいものの一つ。
HDD性能(読み書き速度)やメモリサイズ等の環境により、どのくらいのサイズでどのくらいの影響が出るのかは全然違ってくる。
要はちゃんとログローテートをかけておけということですね。
4.ネットワークカードがオフになっている場合
(パス例)
  /etc/sysconfig/network-scripts/ifcfg-eth0
  /etc/sysconfig/network-scripts/ifcfg-eth1

等のファイルにネットワークカードの設定が記述されている。
2つあり、両方動作している場合は大概WEB(グローバル)とLANではないかと。

それらのファイルの中には

  IPADDR=222.222.22.222

とか

  IPADDR=192.168.1.22

とか書いてあるので、その情報を元にどのネットワークカードをオンにするのか調べる。
上記例でWEB側ネットワークカードをオンにしたい場合は“IPADDR=222.222.22.222”と書いてある方を選ぶ。
例では eth0 が対象とする。
場合によっては非常に危険なので注意!

※切断するネットワークカード以外から接続していることを確認すること!!
※接続しているネットワークカードをオフにしたらサーバにアクセスできなくなる!!
※二系統以上の回線で繋がっているサーバにのみ行ってよい!!!

/usr/local/apache/bin/apachectl stop
/etc/sysconfig/network-scripts/ifdown eth0
/etc/sysconfig/network-scripts/ifup eth0
/usr/local/apache/bin/apachectl startssl
※切断するネットワークカード以外から接続していることを確認すること!!
※接続しているネットワークカードをオフにしたらサーバにアクセスできなくなる!!
※二系統以上の回線で繋がっているサーバにのみ行ってよい!!!

ちなみにリモートでアクセスしているのでなければネットワークカードを切っても別に問題ない。
また、リモートでもオフとオンのコマンドを同時に(コピペで)入力すれば実際に接続が切れる前に両コマンドを送れるのでうまくいくこともある。ただし、うまくいかなくても全くおかしくないので最悪の場合の対処として考えておくべき。

ネットワークカードのオン/オフ切り替え後から有効になるまでは多少のラグがある(数秒〜十数秒くらい?)。