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

HubotをRaspberry Piで動作させているのですが、気がつくと停止していることがあります。 その時には、Slack経由で呼びかけても、なんの返事もありません。 家にいれば、アクセスして呼び起こすこともできますが、出先だと手も足も出ません。 長い間泣き寝入りしていたのですが、やっと解決策を見つけました。 ## 解決策 定期的にHubot (forever) のログを確認して、DownしていたらHubotをリスタートする ### 詳細 下記のコマンドで動作中のforeverのリストが取得できます。 ```bash `gutter:false; $ 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で取り出します。 ```bash `gutter:false; forever list | grep '.*log ' | sed -E 's/.* ([^ ]+\.log).*/\1/ ``` ログファイルを見ると、停止している時には、再接続できていないようです。 ```text `gutter:false; [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させることにしました。 スクリプトは下記の通りです。 ```bash `gutter:true; #!/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 件のコメント :

コメントを投稿