気づいたらHubotがDownしている時の対応

HubotをRaspberry Piで動作させているのですが、気がつくと停止していることがあります。
その時には、Slack経由で呼びかけても、なんの返事もありません。
家にいれば、アクセスして呼び起こすこともできますが、出先だと手も足も出ません。
長い間泣き寝入りしていたのですが、やっと解決策を見つけました。

解決策

定期的にHubot (forever) のログを確認して、DownしていたらHubotをリスタートする

詳細

下記のコマンドで動作中のforeverのリストが取得できます。

$ forever list
info:    Forever processes running
data:        uid  command script                                               forever pid  id logfile                        uptime        
data:    [0] zz4D coffee  node_modules/.bin/hubot --adapter slack --name alice 1270    2279    /home/xxxxxx/.forever/zz4D.log 0:11:39:35.111
$

実行結果を見ると、ログファイルの場所が記載されています。
ログファイルのパスをgrepで取り出します。

forever list | grep '.*log ' | sed -E 's/.* ([^ ]+\.log).*/\1/

ログファイルを見ると、停止している時には、再接続できていないようです。

[Wed Jan 31 2018 03:00:12 GMT+0900 (JST)] INFO Connecting...
[Wed Jan 31 2018 03:00:14 GMT+0900 (JST)] INFO Logged in as alice of k28 home, but not yet
[Wed Jan 31 2018 03:00:15 GMT+0900 (JST)] INFO Slack client now connected
[Wed Jan 31 2018 03:00:18 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
[Wed Jan 31 2018 07:30:45 GMT+0900 (JST)] INFO Slack client closed, waiting for reconnect

そこで、"waiting for reconnect"があったらrestartさせることにしました。

スクリプトは下記の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
 
PATH=$PATH:/home/hogehoge/.nvm/versions/node/v4.4.1/bin:/home/hogehoge/.rbenv/shims:/home/hogehoge/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
 
# get log file path from forever
LOG_FILE_PATH=`forever list | grep '.*log ' | sed -E 's/.* ([^ ]+\.log).*/\1/'`
# chekc is last log is 'Slack client closed, waiting for reconnect'
IS_ALICE_DOWN=`cat $LOG_FILE_PATH | tail -1 | grep 'waiting for reconnect'`
 
 
if [ $? -eq 0 ]; then
    # write log
    today=$(date "+%Y%m%d %H:%M:%S")
    echo "[$today] alice is down. Restart alice..." >> /tmp/restart_alice.log
 
    # restart commadn
    forever restartall
fi

あとは、これをcronに登録して30分おきに実行させるようにしました。
最大で30分程度使えない時があることになりますが、実生活で使う分には問題ありません。
ログを見ると、1日1回程度は止まっているようです。

0 件のコメント :

コメントを投稿