2007年10月31日水曜日

rsyncの--dry-runオプションで実際に同期を取る前に確認する

便利なrsyncですが、たまに間違えて同期してはいけないのに同期してしまい、必要なファイルを上書きしたり消してしまったりといったことがあります。

そんなミスを防ぐには、--dry-runのオプションをつけてrsyncを実行します。

このオプションがあると実際にファイルの更新は行わず、更新ファイルのリストだけが表示されるので、同期前に確認ができるというわけです。
便利なので覚えておくと良いと思います。

2007年10月22日月曜日

生年月日から年齢を計算する簡単な計算式

(今日の日付-誕生日)/10000の小数点以下切捨て

これで計算できちゃうそうです。
すごい便利なので覚えておこう。
http://itpro.nikkeibp.co.jp/article/Watcher/20070822/280097/

2007年10月17日水曜日

phpの連想配列の添字は必ずダブルクオートで囲むこと!

以前、どこかのブログで

連想配列の添字は必ずダブルクオートで囲むこと!

というエントリを読んだことがあります。
つまり、こういうことです。

× $row[hoge]
○ $row["hoge"]


ダブルクオートなしとありでは、6倍近くパフォーマンスが変わってくるんだそうです。

というわけで、それを知ってからは必ず連想配列の添字はダブルクオートで囲むようにしていました。


そして今回、あるきっかけでこのダブルクオートの重要さを思い知ることになりました。。

きっかけは、2年近く前に作ったアプリケーションの動作が重たくなってきたことでした。2年の運用によってデータ量が多くなっており、ひとつの処理に数分かかって途中でタイムアウトしちゃったり、、といったことがしばしば。

ずっとDB側を疑っていました。SQLが効率悪いんじゃないか、とか、DBのチューニングが必要なんじゃないか、とか。

そしてある日、「そういえばこのアプリ、配列の添字をダブルクオートで囲んでいないな」ということを思い出しまして、特に重い処理を行うphpプログラムを選んで、添字をダブルクオートで囲んでやると、、、劇的に症状が改善!!

たしかに、このスクリプトでは何百回もループして同じ処理を繰り返しているので、積み重ねでどんどん重くなっていたんでしょう。たかがダブルクオート、されどダブルクオート、、、いい勉強になりました。

phpで使える正規表現

http://phpspot.org/blog/archives/2007/10/php_84.html
これは便利ですね。使わせていただこうと思います

2007年10月16日火曜日

sshパスワード無し公開鍵で接続でエラー(結局パーミッションエラーだった)

sshパスワード無し公開鍵接続のやり方については特に難しくないと思います。
ssh パスワード」とか「ssh_keygen」などで検索すると有用なドキュメントがワンサカでてきます。
なので自分の環境でもスンナリ行くかな、、、と思っていたんですが、思わぬ罠にはまりました。
すべてお膳立てしてさあ接続!とやっても
Permission denied (publickey,password,keyboard-interactive).

というエラーが出てしまうのです。
わからん、さっぱりわからん。rsaもdsaもダメだし、sshd_configの記述に間違いは見当たらない、、、
見落としがちな「~/.ssh」と「~/.ssh/authorized_keys」のパーミッションも問題なし。
そのまま悩むこと半日。
http://www.upken.jp/report/cronrsyncssh.html
こちらのページを見て、「そういえば、ログを見てなかった」という超初歩的なことを思い出した。
さっそく/var/log/secureをみてみると、
Authentication refused: bad ownership or modes for directory /home/hoge

というエラーが出ていた。
そう、「~/.ssh」 と 「~/.ssh/authorized_keys」だけじゃなく、ホームディレクトリのパーミッションも適切に設定する必要があったのです(700じゃないとダメ)
パーミッションを直して再度試してみたら、、、無事接続できました!!
トラブったらまずはログを見る。鉄則ですね。
性格の問題なのか、たまーに忘れてしまうんです。。

sshd_configの設定内容にミスがないか確認する

# /usr/sbin/sshd -t


記述にミスがある場合のみ、その旨が表示されます。
リモートから接続している場合、sshd_configの設定が間違っている状態でrestartすると取り返しのつかないことになりかねないので、テストしてからrestartしたほうが安全です。
ちなみにCentOSでのsshd_configのパスは「/etc/ssh/sshd_config」。

2007年10月8日月曜日

mrtgのインストール・設定

mrtgを入れました。
まずはyumでインストール。

# yum install net-snmp
# yum install net-snmp-utils
# yum install mrtg

/etc/snmp/snmpd.confを編集。

# sec.name source community
#com2sec notConfigUser default public
com2sec local localhost private
# groupName securityModel securityName
#group notConfigGroup v1 notConfigUser
#group notConfigGroup v2c notConfigUser
group MYROGroup v1 local
group MYROGroup v2c local
group MYROGroup usm local
# Make at least snmpwalk -v 1 localhost -c public system fast again.
# name incl/excl subtree mask(optional)
#view systemview included .1.3.6.1.2.1.1
#view systemview included .1.3.6.1.2.1.25.1.1
view all included .1 80
# group context sec.model sec.level prefix read write notif
#access notConfigGroup "" any noauth exact systemview none none
access MYROGroup "" any noauth exact all all none
#disk / 10000
disk / 10000

そしてsnmpdを起動。

# /etc/rc.d/init.d/snmpd start
# chkconfig snmpd on

/etc/mrtg.mrtg.cfgの編集。
※以下の例は、メモリは498516、swapは1052248

WorkDir: /var/www/mrtg
Refresh: 300
Language: eucjp
### Traffic Analysis ###
Target[traffic]: 2:private@localhost:
MaxBytes[traffic]: 12500000
Options[traffic]: growright
Title[traffic]: Traffic Analysis
PageTop[traffic]:

Traffic Analysis


###CPU Used###
Target[cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:private@localhost
MaxBytes[cpu]: 100
Unscaled[cpu]: dwmy
Options[cpu]: gauge, absolute, growright, nopercent
YLegend[cpu]: CPU Load Av. (%)
ShortLegend[cpu]:%
LegendI[cpu]: 1minute
LegendO[cpu]: 5minute
Legend1[cpu]: 1minute(%)
Legend2[cpu]: 5minute(%)_
Title[cpu]: CPU Load
PageTop[cpu]:

CPU Load Average


### Memory Used ###
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:private@localhost
MaxBytes1[mem]: 498516
MaxBytes2[mem]: 1052248
Unscaled[mem]: dwmy
Options[mem]: gauge, absolute, growright
YLegend[mem]: Memory Used (MB)
ShortLegend[mem]:Bytes
kilo[mem]: 1024
kMG[mem]: k,M,G,T,P
LegendI[mem]: Real
LegendO[mem]: Swap
Legend1[mem]: Physics Memory(MB)
Legend2[mem]: Physice Swap(MB)
Title[mem]: Memory Used
PageTop[mem]:

Memory Used


### Disk Used ###
Target[disk]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.1:private@localhost
MaxBytes[disk]: 100
Unscaled[disk]: dwmy
Options[disk]: gauge, absolute, growright, nopercent, noinfo
YLegend[disk]: Disk Used(%)
ShortLegend[disk]: (%)
LegendI[disk]: / Disk used
LegendO[disk]: / Disk Used
Legend1[disk]: / Disk used
Legend2[disk]: / Disk used
Title[disk]: Disk Used
PageTop[disk]:

Disk Used



mrtgを実行。

# mrtg /etc/mrtg/mrtg.cfg
# mrtg /etc/mrtg/mrtg.cfg
# mrtg /etc/mrtg/mrtg.cfg

インデックス作成。
indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html

以上ですべて完了。
今のところはうまく動いているようです。
参考サイト
http://www.k2.dynsite.net/redhat/14.MRTG.htm
http://centossrv.com/net-snmp-mrtg.shtml
http://fedorasrv.com/mrtg.shtml
http://crosss.jugem.jp/?eid=76