Archive for Linux
コピペでできるiptables
サーバをセットアップするときに、iptablesをコマンドでちゃちゃっと設定したいときのためのメモ。
リモートで実行する際にはお気を付けください。
自己責任でご利用願います。Cent OS 4.6にて動作確認はしてあります。
export PATH=$PATH:/sbin/:/usr/sbin/ # allow access for this setting iptables -P INPUT ACCEPT iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # reset policy iptables -F # allow iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p udp --dport 20 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # back to set input as drop iptables -P INPUT DROP # save /etc/init.d/iptables save
ext3ってinode増えすぎると壊れるくさい
2回経験した。
■1
PVがほどほどにあるサイトで、PHPを使ってページをレンダリングしていた。
PV数が多くなり、PHPのGCの処理が追いつかなくなり、セッションを保存するファイルが消えずにどんどん溜っていった。
→fsckかけたらエラーだらけ。
■2
logrotateの設定をミスって、rotateしたログをrotateするという指数的にファイル数が増える状態になっていた。
設定を間違っているのに気づき、ファイルを消した。その後、logrotateが途中で止まる。logrotate -dしても途中で止まる。CPUはuserレベルで100%使ってた。
→fsckかけたらエラーだらけ。
ext3 ファイルシステム信頼できね。
シェルスクリプトで排他処理
運用サーバで、2分おきにsubversionのupdateを行うシェルスクリプトを動かしています。
今までは、1回のupdateが50秒程度で終了するので、同時実行を防ぐための排他処理をしていませんでした。しかし、サーバの負荷が高かったときは2分以内で終わらない場合があるためスクリプト実行の排他処理をしなければなりません。
Webを調べているとシェルスクリプトでロック用のディレクトリを作ってます。しかし、かっこわるい。。。そこで見つけたのがlockfileというコマンド。このコマンドを使った方がロック取得を失敗したときの挙動を変えられるから便利そうです。(今回の場合は意味無いけど)
以下にコード書いておきます。
#!/bin/sh LOCKFILE=/tmp/subversion.locked # try to get lock. With no retry. lockfile -r 0 $LOCKFILE # evaluate return code if [ $? -ne 0 ]; then echo "Command aborted" exit 1 fi # do something exclusive command echo "important command" # unlock rm $LOCKFILE
Fatal error: Exception thrown without a stack frame in Unknown on line 0
PHPのsession管理のためにファイルを利用しているとき、そのファイルを保存する場所が読み書きできない場合に発生。
Fatal error: Exception thrown without a stack frame in Unknown on line 0
複数台で運用しているサーバのアクセスログを1つに統合する
複数台のフロントエンドサーバでapacheが動いている場合を想定します。
その場合、アクセスログが複数のサーバにまたがってしまいます。
こんなかんじ。
- web-01.access-log.20071130
- web-02.access-log.20071130
- web-03.access-log.20071130
webalizerやawstatsといったアクセスログ解析ソフトではこのファイルの状態では解析できない。
なぜなら、webalizerやawstatsのデフォルトでは1つのファイルのみを入力として受け付け、時系列順に記録されていなければならない。
この問題を解決するスクリプトを発見しました。awstatsの中に入っているlogresolvemerge.plというperlスクリプトです。
使い方は超簡単。引数に統合したいファイルを指定して実行すると、標準出力に時系列順にそろったレコードが出力される。
例:
% perl logresolvemerge.pl /path/to/log/*access.log.20071130|more
引数にgz圧縮されたファイルを指定してもちゃんと動きます。至れり尽くせりなスクリプト。
★おまけ情報★
ある日まで、commonフォーマットでアクセスログを取っていて、ある時点からcombinedフォーマットでログを取りだした場合、1つのアクセスログの中に2種類のフォーマットのログが混入してしまう。
そこで見つけたのがこの方法。commonフォーマットをcombinedフォーマットにする方法。
http://www.trisweb.com/archives/2007/02/15/convert-apache-common-logs-to-combined-logs/
3回シェルのコマンドを実行すればできちゃう!CUIはすばらしい。
参照:
Compiling subversion from source distribution.
% ./configure --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl % make # make install
subversion-1.4.5 on linux CentOS 4.4.
【トリビア】GMTとUTC
世の中GMTで回っていると思ってたら大間違い!
この世の中はUTCで 回っているのさ!
詳しい説明:






















