Archive for Linux

ソースコードのスペルチェック

http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Aspell#ve0ff963

ソースコードにある英単語のスペルチェック。

PHPやHTMLなど、どんなファイルでもできるはず。

findの引数でチェックしたいファイルを指定してね。

 % find modules libs batch  -name '*.php' |sed "s/[A-Z][a-z]/ \0/g" | tr '[A-Z]' '[a-z]' |aspell -l |sort|uniq
acc
addphp
api
...
....

自分で、単語を登録したい場合は、ここら辺を参照してみてください。

Mozilla Thunderbirdを使うとIMAPサーバ暴走

IMAPサーバを動かしているサーバのロードアベレージが70ぐらいになって、大変なことになっていた。
・IMAPサーバ:dovecot-0.99.11-9.EL4 (ファイルシステムext3)
・IMAPクライアント:2.0.0.17
状況は、ps axuするとIO待ちのimapプロセスが大量に存在する。

原因がわかったので、書いておく。
今回の場合、Trashフォルダに数万件のメールがあり、何かのメールを削除するとThunderbirdがTrashフォルダに
新規スレッドでアクセスする。
ファイルが大量にあるMaildirを見ると以下のように、ディレクトリ自体の容量が大きい。

% ls -al
drwx------   2 matsu matsu  95M Sep 20 10:19 cur
drwx------   2 matsu matsu 7.9M Sep 20 10:19 new
drwx------   2 matsu matsu 9.1M Sep 24 08:00 tmp

そのスレッドの処理にimapサーバが長時間かかる。
また、メールを削除するたびにサーバ側でimapスレッドが生成されてしまう。

そのため、ファイル削除に加えて、ディレクトリの再作成をすれば回復する。

% cd ~/Maildir/Trash/
% find cur -exec rm {} \;
% rmdir cur
% mkdir cur
% chmod 700 cur

ファイルを削除するだけだと、だめ。inodeのフラグメントがあるらしく時間がかかるからディレクトリを再作成してあげる必要がある。

もっと詳しく >>

sed memo

apacheのアクセスログからGETパラメータの数字だけを列挙。

% zcat ssl-access_log.200807*|grep IsReturn|sed 's/.*orders_suppliers_id=\([0-9]\+\).*/\1/g'

sedってエスケープする文字が微妙。。。

Subversion1.5になってからエラーが頻発・・・

↓こんなこと言われたら、たまったもんじゃない。

% svn ci -m ''
svn: Working copy '/hoge' locked
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
$ svn cleanup
svn: Unable to lock 'hoge'

原因は、.svnディレクトリ内がぶっ壊れているため。

解決策は、別の場所にmoduleをcheckoutして、同じ階層の.svnディレクトリを丸ごとコピー
% cp -ra /new/.svn /broken/

qmail-0.0.0.0.patch

qmail-0.0.0.0.patchが保存してあるのサーバが落ちているようなので、キャッシュ用に保存しておきます。

qmail-0.0.0.0.patch

シェルスクリプトでIPアドレスを求める方法

シェルスクリプト内で自ホストのIPアドレスを利用したいときがあったので、書いてみた。

長くて汚いなぁ。

 % /sbin/ifconfig|grep 'inet addr'|grep -v 127.0.0.1|gawk '{print $2;}' | gawk -F : '{print $2;}'
192.168.100.84
%

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

ポート番号からサービス名

Linuxホスト上で、あるポートを占有しているプロセスを調べる方法。

たまにしか使わないけど、重要なのでメモっておきます。

# lsof -i:53

lsof ポート番号

ext3ってinode増えすぎると壊れるくさい

2回経験した。

■1

PVがほどほどにあるサイトで、PHPを使ってページをレンダリングしていた。

PV数が多くなり、PHPのGCの処理が追いつかなくなり、セッションを保存するファイルが消えずにどんどん溜っていった。

→fsckかけたらエラーだらけ。

■2

logrotateの設定をミスって、rotateしたログをrotateするという指数的にファイル数が増える状態になっていた。

設定を間違っているのに気づき、ファイルを消した。その後、logrotateが途中で止まる。logrotate -dしても途中で止まる。CPUはuserレベルで100%使ってた。

→fsckかけたらエラーだらけ。

ext3 ファイルシステム信頼できね。

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

 

リンク