
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 件のコメント :
コメントを投稿