Hatena::Grouptwitterircgateway

yukogets が TIG ではうはう このページをアンテナに追加 RSSフィード

2013-03-31

Monit に tig の監視をさせてみた

| 16:42 | Monit に tig の監視をさせてみた - yukogets が TIG ではうはう を含むブックマーク はてなブックマーク - Monit に tig の監視をさせてみた - yukogets が TIG ではうはう Monit に tig の監視をさせてみた - yukogets が TIG ではうはう のブックマークコメント

1つ前の(3年前の)記事の最後で daemontools とか使いたいみたいな事を書いてましたが、ようやく(3年越しで)重い腰を上げてやってみました。ただし daemontools ではなく Monit を使いました。

導入記事は FreeBSD グループの方に書きましたのでそちらをご覧ください。

Monit を導入してみた

2010-01-31

id:yutamoty の TIG 介護スクリプトを FreeBSD に移植しました

| 18:46 |  id:yutamoty の TIG 介護スクリプトを FreeBSD に移植しました - yukogets が TIG ではうはう を含むブックマーク はてなブックマーク -  id:yutamoty の TIG 介護スクリプトを FreeBSD に移植しました - yukogets が TIG ではうはう  id:yutamoty の TIG 介護スクリプトを FreeBSD に移植しました - yukogets が TIG ではうはう のブックマークコメント

あらすじ

FreeBSDVMware 上での運用に切り替えたら、メモリが少なくなったせいか(512MB)TIG を動かしてる mono が前より頻繁に暴走してしまうようになりました。

そこで、d:id:yutamoty:20091207:1260179880 のシェルスクリプトを FreeBSD に移植して、TIG の CPU 占有率が高まったりお亡くなりになったりした場合に自動的に生き返らせるようにしてみました。

スキルが無いので1つのスクリプトで両方で動くというかっこいいのに出来ませんでした。だれかおねがいします。

ソース

#!/usr/local/bin/bash

## パスの設定
MONO="/usr/local/bin/mono"
TIG="$HOME/bin/TwitterIrcGateway/TwitterIrcGatewayCLI.exe"
TIGOPTION="--bind-address=0.0.0.0 --port=16668 --encoding=UTF-8 --interval=60 --enable-replies-check=true --broadcast-update=true --broadcast-update-message-is-notice=true --set-topic-onstatuschanged=true --disable-userlist=true"
LOGDIR="$HOME/log"
LOG="$LOGDIR/tigps.log"

## 実行部
while true
do
# プロセスが落ちてたら再起動
   PID=`pgrep -f 'mono'`
   if [ -z $PID ]; then
      $MONO $TIG $TIGOPTION &
      time=`date "+%Y/%m/%d %H:%M"`
      echo "[$time] TIG is not running. Restarted." >> $LOG
      echo `uptime | awk -F"," '{print $4"," $5"," $6}'` >> $LOG
      sleep 60
   fi
# CPU 使用率が 90% 越えたら再起動
   TIGCPU=`top -b | grep mono | awk '{print $10}' | cut -d "." -f 1`
   if [ "90" -lt "$TIGCPU" ]; then
      kill -9 $PID
      sleep 3
      $MONO $TIG $TIGOPTION &
      time=`date "+%Y/%m/%d %H:%M"`
      echo "[$time] Detected overload. Restarted." >> $LOG
      echo "tigcpu $TIGCPU" >> $LOG
      echo `uptime | awk -F"," '{print $4"," $5"," $6}'` >> $LOG
      sleep 60
   fi
   sleep 3
done

ちょっと解説

FreeBSDmono を起動すると、プロセス名がこんな感じになってしまいます。

$ ps ax | grep mono
23432   0- S     72:39.52 [mono]

どういうことかというと、TwitterIrcGatewayCLI.exe が動いているにも関わらず、TwitterIrcGateway という文字列が出てこないのです。そこでしかたなく、pgrep で TIG のプロセスを探す際の文字列を 'mono' に変更しました。

当然、他に mono という文字列を含むプロセスが動いているとアウトなので何とかしたいのですが・・・。


あと、top の出力が LinuxFreeBSD では違います。

$ top -b | grep mono
23432 qlo         8  44    0   381M   297M ucond   72:47  0.98% mono

のように、CPU 負荷率の項目が左から 9 番目ではなく 10 番目になるので、これを抽出する部分を修正しています。


それから、死んでたにしろ暴走してたにしろ、TIG を再起動した後は 60 秒待つようにしてあります。うちの環境では TIG 起動直後に CPU 負荷が 90% を超えてしまうので、これが落ち着くまでウェイトを入れないとまた落とされてしまいます(´・ω・`)


他に、各種プログラムへのパスを変数で指定するようにしたり、(僕が)見やすくするために w | head -n 1 を uptime に置き換えたりしてあります。


そうそう、bash 自体が FreeBSD では /usr/local/bin/bashports とかから入れた場合)なので、1行目も修正してあります。

あとがき

とりあえずこれでちゃんと動いてるみたいですけど、daemontools とか使う方がスマートなのかなぁとか。暇があったら設定に挑戦みてみます。

2009-12-08

今、FreeBSD で TIG 環境を作ろうとすると・・・

| 01:43 |  今、FreeBSD で TIG 環境を作ろうとすると・・・ - yukogets が TIG ではうはう を含むブックマーク はてなブックマーク -  今、FreeBSD で TIG 環境を作ろうとすると・・・ - yukogets が TIG ではうはう  今、FreeBSD で TIG 環境を作ろうとすると・・・ - yukogets が TIG ではうはう のブックマークコメント

ということになると思うのですが、

もやらないと動かなかったのでメモ。


ちなみに今 scraping.py がうまく動いてません。(まゆきちせんせいたん報告済)

2009-05-13はうはう

FreeBSD で mono 2.4 を make する方法

| 20:58 |  FreeBSD で mono 2.4 を make する方法 - yukogets が TIG ではうはう を含むブックマーク はてなブックマーク -  FreeBSD で mono 2.4 を make する方法 - yukogets が TIG ではうはう  FreeBSD で mono 2.4 を make する方法 - yukogets が TIG ではうはう のブックマークコメント

※ 今は ports で普通に mono 2.4 系がインストールできますので、この記事は無意味となりました。


f:id:yukogets:20090513203818p:image とうとう FreeBSD 上で mono 2.4 が動くようになってちわちわしてる。ていうか公式に ports へのパッチがあって全然難しくなかった。

f:id:yukogets:20090513203819j:image @yukogets その辺りのことブログに纏めといてもらえると嬉しいです

f:id:yukogets:20090513203818p:image @ssig33 はあく

というわけで書きます。


いきさつ

自宅のサーバでは FreeBSD 7.1-RELEASE を使用しているのですが、この環境では TIG にバンドルされている mono はライブラリの依存関係の問題で動作しません。

ports から mono を入れれば実行できます。しかし、今現在 ports でインストールできる mono 2.0 では、DLR スクリプトを reload するとエラーになってしまいます。

どうやら 2.2 or 2.4 を入れれば動くらしいですが、monotar 玉を取ってきて ./configure && make しても途中でエラーを吐いて止まります。ううむ。困った。

というわけで、ちょっと調べてみたら割と簡単に 2.4 が入りました。以下その方法です。

mono-merge のインストール

前述の通り、FreeBSD 上ではそのままでは mono の make が通りません。

それをなんとかする仕組みが、こちらの中ほどにある mono-merge です。

これは何かというと、portsmono のバージョンを新しくし、さらにそれの make が通るように依存する ports に修正パッチを当てまくるツールです。

$ fetch http://bsd-sharp.googlecode.com/files/mono-merge.tar.gz
$ tar xvzf mono-merge.tar.gz
$ cd mono-merge
$ sudo make install
Password:
install -o root -g wheel -m 555 mono-merge.sh /usr/local/bin/mono-merge
install -o root -g wheel -m 444 mono-merge.8 /usr/local/man/man8
install -o root -g wheel -m 444 mono-merge.cfg /usr/local/etc
$ sudo /usr/local/bin/mono-merge
...

で、終わると /usr/ports/lang/mono のインストール対象バージョンが 2.4 になり、make install できるようになっています。

mono 2.4 のインストール

$ cd /usr/ports/lang/mono
$ sudo make install clean
...

これだけです。あっけない。

というわけで、

FreeBSD 7.x でもちわちわしたりできるようになりました。

めでたしめでたし。

参考

d:id:ak11:20081009 FreeBSDmonoを入れた