Drkcore

16 03 2011 Fastladder Tweet

サーバー起動時にFastladderが一緒に立ち上がるようにする(途中)

うちの職場の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)

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021