2011/03/16 17:02:20
うちの職場のFastladderの延べユーザーは7割を超えていて、サーバーが落ちてるとすぐに苦情がくるような状況だ。このアクティブユーザー率にすんのに3年以上の地味な努力と啓蒙活動があったわけだが。
で、そもそもこういったインフラは僕の仕事じゃないので障害対応しても給料に反映されるわけじゃなくて、むしろ時間を奪われるので、クローラーをdaemontoolsで動かしたりして手間を減らした。おかげで、一回起動させればサーバーが安定に動いている限りなにもしなくても良くなった(ここ一年くらいは障害対応ほとんどしてない)んだけど、今週から始まった計画停電で毎日起動してシャットダウンをしてというの繰り返しつつ、mongrel立ち上げて、クローラー動かしてっていうのはだるいのできちんと起動、停止するようにしようとした。
けど、いまのとこうまくいってないのでやっつけスクリプトでしのいでいる。
mongrel
rc.localで/usr/local/fastladder/tmp/pids/mongrel.pidが存在したらrmするように書いておいて以下のシェルスクリプトをcronで実行するようにしている。
#!/bin/sh
if [ ! -e /usr/local/fastladder/tmp/pids/mongrel.pid ];
then
cd /usr/local/fastladder; script/server -d -e production
fi
ほんとはShapadoのようにpassengerで動かせれば楽なんだろうけどFedoraCore6だからなぁ。インストール出来んのかな?明日調べてみるか。
crawler
シャットダウン時に
svc -d /service/fastladder
するようにしてみたんだけど、どうもうまくいってないのでドキュメント読みなおす。あと日本語訳も。
とりあえず、リブートするとプロセスが即落ちする(svstatで継続時間が1秒以内に落ちてプロセスがどんどん大きくなる状況になる)ので、この場合に
svc -dx /service/fastladder /service/fastladder/log
を適当な感覚でまわし続けるcronを動かしておいた。
#!/usr/bin/python
import commands
import time
import re
reup = re.compile("(\d+) seconds")
def get_uptime():
uptime = 0
svresult = commands.getoutput('svstat /service/fastladder')
m = reup.search(svresult)
if m != None:
uptime = m.group(1)
return uptime
if __name__ == '__main__':
for i in range(300):
if get_uptime() > 2:
break
else:
commands.getoutput('svc -dx /service/fastladder /service/fastladder/log')
time.sleep(10)
2009/02/14 09:34:54
クローラーがたまに落ちるのでモダンperl入門にあったdaemontoolsを使ってみることにした。
srpmはここからダウンロードしてきて
rpmbuild --rebuild daemontools-toaster-0.76-1.3.3.src.rpm
できたrpmをインストール。
fastladderのあるディレクトリ(僕の場合は/usr/local/fastladder)でdaemonとdaemon/logっていうディレクトリを作ってそれぞれのディレクトリにrunという実行ファイルを用意
daemon/run
| #!/bin/sh
exec 2>&1
exec setuidgid root /usr/local/fastladder/script/crawler -e production
|
daemon/log/run
リンク
chmod 1755 /usr/local/fastladder
ln -s /usr/local/fastladder/daemon /service/fastladder
あとはdaemontoolsで動かす。
参考: daemontoolsでデーモン管理
2008/10/21 19:47:18
fastladder素晴らしい。早速インストールしてみた。rubyは普段使わないのでrubygemsから。
$ ruby ./setup.rb
./lib/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rdoc/rdoc (LoadError)
from ./lib/rubygems/custom_require.rb:27:in `require'
from ./setup.rb:39
どうもruby-docが足らない。
これで、gem installでmongrelとかrailsが入る。
あと、freeimageを入れとかないとエラーが出て動かない。なんでここで解決。ただしyumでは入らなさげだったのでソースから入れた。

やー超快適。サーバーとかいじってる暇なさげだけど、隙をみて職場のRSSリーダー入れ替える計画を立てなきゃ。
2008/08/10 19:51:58
職場に入れたかったのでproxyに対応させる必要があった。というわけで作業メモ。
trunkにタイポがあったので二カ所ほど修正した気がする。
あと、addする際に登録できないフィードがあってなんでかな?と思ってみたら、urlが全部小文字になってた。これもrfeedfinderの仕業だった。
16行目くらいの
uri = uri.grep.sub(/^feed(.*)/,'http\1'/.downcase
のdowncaseが邪魔なので、ここを修正。
今日の作業はここまでだけど、RSSとAtomだったらAtomのほうを購読したほうがよさげな感じがしたりとかするので、そこらへんのコードも見てみながらrubyの勉強もする。
というか、rubyのシンボルでちょっと悩んでググったりとかした。
2008/07/17 21:35:25
これを10冊ぐらい買って、さりげなく職場に撒いておきたい今日この頃
はじめてのRubyのおかげで、Rubyのコードを読むのが楽しくなってきたので、opensource版のfastladderでABCのフィードがブックマークレットから登録できなかった理由を調べた。
fastladder.rbがリダイレクトに対応してないっぽいのでこんな感じでレスポンスのチェックをすればよさそうなんだけどBasic認証用の処理とか入ってるから、どういう風に書いておけばよいのかわからん。
あと、RSSのURIをブックマークレットで登録しようとしてもフィードが見つからないとかいうのも直しておきたい。