foreverでslackと連携するhubotをデーモン化する
はじめに
お久しぶりです。viatminです。
以前にも、hubot関連のブログを書きました。
hubot-slackで `INFO Slack client closed, waiting for reconnect` がSlack連携が切断される問題への対処法 - Aqutras Members' Blog
今回は、順序が逆な気もしますが、slackと連携するhubotをデーモン化して動作する方法について書きたいと思います。
foreverによるデーモン化
通常、slackと連携したhubotを起動すると、コンソール上に以下の様なhubotのログが出力され、そこで操作ができなくなります。
[Wed Jul 20 2016 15:15:32 GMT+0900 (JST)] INFO Connecting... [Wed Jul 20 2016 15:15:33 GMT+0900 (JST)] INFO Logged in as myHubot of myTeam, but not yet connected [Wed Jul 20 2016 15:15:34 GMT+0900 (JST)] INFO Slack client now connected
この状態では、hubotは動作していますが、ターミナルを終了させると、hubotも停止してしまいます。
永続化するには、デーモン化して、バックグラウンドで動いてほしいところです。
そこで、forever というライブラリを利用します。
foreverは、node.js用のデーモンマネージャです。
これを利用すると、簡単にnode.jsのデーモン化を行うことが出来ます。
構築
ライブラリのインストール
まず、必要最低限なpackage.jsonを作成します。
以下のように記述し、npm install
を実行します。hubotは、実行にcoffee-scriptを必須としているため、これも導入します。
{ "dependencies": { "coffee-script": "^1.10.0", "forever": "^0.15.2", "hubot": "^2.19.0", "hubot-slack": "^4.0.1" } }
起動スクリプトの作成
以下の様な起動スクリプトを作成し、hubotのディレクトリの下の /bin
ディレクトリに配置します。
export HUBOT_SLACK_TOKEN=xoxb-123456789abcdefg export HUBOT_SLACK_TEAM=myTeam export HUBOT_SLACK_BOTNAME=myHubot export HUBOT_DIR=/path/to/dir export PATH=${HUBOT_DIR}/node_modules/.bin:$PATH if [ ! -d ${HUBOT_DIR}/log ]; then mkdir ${HUBOT_DIR}/log fi forever start -l ${HUBOT_DIR}/log/myHubot.log -c coffee -a hubot --adapter slack -r ${HUBOT_DIR}/scripts
スクリプトの各項目の説明
export HUBOT_SLACK_TOKEN=xoxb-123456789abcdefg
slackのhubotのtokenを設定します。ココの説明がわかりやすいです。export HUBOT_SLACK_TEAM=myTeam
slackのチーム名を設定します 。export HUBOT_SLACK_BOTNAME=myHubot
botの名前を設定します。export HUBOT_DIR=/path/to/dir
hubotのディレクトリへのパスを設定しておきます。export PATH=${HUBOT_DIR}/node_modules/.bin:$PATH
npmでインストールしたライブラリへpathを通しておきます。if [ ! -d ${HUBOT_DIR}/log ]; then ~
ログディレクトリがなければ作成をします。
foreverコマンドのオプションの説明
-l ${HUBOT_DIR}/log/myHubot.log
ログの出力先ファイルを指定します。-c coffee
スクリプトを実行するコマンドを指定します。今回は、coffee-scriptで書かれているため、coffeeを指定します。-a
ログに追加書き込みを行います。指定がなければ、毎回新規作成を行います。
hubotコマンドのオプションの説明
--adapter slack
hubotの連携として、slackを指定します。-r ${HUBOT_DIR}/scripts
hubotの動作が記述されているスクリプトのディレクトリを指定します。
実行後、/path/to/dir/log/myHubot.log
に、以下のようにログが書き込まれていれば完了です。
[Wed Jul 20 2016 15:15:32 GMT+0900 (JST)] INFO Connecting... [Wed Jul 20 2016 15:15:33 GMT+0900 (JST)] INFO Logged in as myHubot of MyTeam, but not yet connected [Wed Jul 20 2016 15:15:34 GMT+0900 (JST)] INFO Slack client now connected
おわりに
Aqutrasのhubotは、githubやesaと連携し、社内の開発をサポートしてくれています。
また、 cheerio-httpcli
などのスクレイピングライブラリを利用することで、apiやライブラリを提供していないWebサービスなどの連携も行ってくれます。
まだ導入されていない方は、この記事を参考に、ぜひ自分のteamにhubotを構築してみてください!
合わせて以下の記事もお願いします!!(w
hubot-slackで `INFO Slack client closed, waiting for reconnect` がSlack連携が切断される問題への対処法 - Aqutras Members' Blog