質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Hubot

HubotはGitHub社が開発したチャットbotのフレームワークです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

受付中

RapberryPiでHubotをデーモン化する

MasatoN
MasatoN

総合スコア0

Hubot

HubotはGitHub社が開発したチャットbotのフレームワークです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

1回答

0リアクション

0クリップ

1056閲覧

投稿2021/02/10 03:23

編集2021/02/18 05:09

前提・実現したいこと

以下のサイトを参考にして、RapberryPiでHubotをSlackに繋げそれをデーモン化するコードを書いています。

Raspberry PiにhubotをインストールしてSlackから呼び出すまでの手順

HubotとSlackを繋げるまではできたのですが、デーモン化するところが上手くいきません。
RaspberryPiに関しては完全に初心者でエラー原因が分からないので、解決方法を教えていただきたいです。

発生している問題・エラーメッセージ

systemdに作成した設定ファイルpibot.serviceの動作確認をすると以下のようなエラーが出てしまいました。

pi@raspberrypi:/etc/systemd/system $ systemctl status pibot ● pibot.service - pibot service Loaded: loaded (/etc/systemd/system/pibot.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-02-10 10:38:17 JST; 31min ago Main PID: 2276 (code=exited, status=203/EXEC) 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Service RestartSec=100ms expired, scheduling restart. 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Scheduled restart job, restart counter is at 5. 2月 10 10:38:17 raspberrypi systemd[1]: Stopped pibot service. 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Start request repeated too quickly. 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Failed with result 'exit-code'. 2月 10 10:38:17 raspberrypi systemd[1]: Failed to start pibot service.

pibot.service

[Unit] Description=pibot service [Service] ExecStart=/home/pi/hubot/pibot/bin/run_hubot.sh Restart=always Type=simple [Install] WantedBy=multi-user.target

エラーコードが出た経緯

1. Hubotの設定
まず、RaspberryPiの/home/pi/hubot/pibotディレクトリを作り、そこでyo hubotを実行しhubotの作成を行いました。

$cd ~/hubot/pibot $yo hubot

その後、Hubotの設定を以下のように行いました。

Owner:自分のメールアドレス
Bot name:pibot
Description:適当な値
Bot adapter:slack

設定した後に$bin/hubotpibot pingを実行すると、HUBOTからPONGと返ってきたのが確認できました。

2.SlackとHubotを繋げる
次にSlackにHubotを追加したのち、APIトークンをコピーしました。
イメージ説明
その後、~/hubot/pibotディレクトリの中で、hubotの設定ファイルを開きました。

$cd ~/hubot/pibot $nano bin/hubot

上のコマンドをターミナルに打つと下のようなテキストエディタが開かれたので、取得したAPIトークンをペーストしました。

#!/bin/sh set -e npm install export HUBOT_SLACK_TOKEN=(取得したSlackのAPIトークン) export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" exec node_modules/.bin/hubot --name "pibot" "$@"

ターミナルに戻り、$bin/hubot -a slackを実行してみると、Slack上でHubotが反応しているのが確認できました。
3.Hubotのデーモン化
まず、bin/hubotと同じディレクトリにrun_hubot.shというシェルスクリプトを作成しました。

$cd /home/pi/hubot/pibot/bin $sudo nano run_hubot.sh

run_hubot.sh

#!/bin/sh cd /home/pi/hubot/pibot sudo -u pi bin/hubot --adapter slack

その後、systemd/systemフォルダに移動しサービス起動用の設定ファイルpibot.serviceを追加しました。

$cd /etc/systemd/system $sudo nano pibot.service

pibot.service

[Unit] Description=pibot service [Service] ExecStart=/home/pi/hubot/pibot/bin/run_hubot.sh Restart=always Type=simple [Install] WantedBy=multi-user.target

その後、pibot.serviceが正しく実行できているかどうかを確認するために、ターミナルで以下のコマンドを実行しましたが、上述のようなエラーが出てしまいました。

$sudo systemctl daemon-reload $systemctl status pibot
pi@raspberrypi:/etc/systemd/system $ systemctl status pibot ● pibot.service - pibot service Loaded: loaded (/etc/systemd/system/pibot.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2021-02-10 10:38:17 JST; 31min ago Main PID: 2276 (code=exited, status=203/EXEC) 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Service RestartSec=100ms expired, scheduling restart. 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Scheduled restart job, restart counter is at 5. 2月 10 10:38:17 raspberrypi systemd[1]: Stopped pibot service. 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Start request repeated too quickly. 2月 10 10:38:17 raspberrypi systemd[1]: pibot.service: Failed with result 'exit-code'. 2月 10 10:38:17 raspberrypi systemd[1]: Failed to start pibot service.

試したこと

1.pibot.serviceのRestartの変更
https://teratail.com/questions/242215
上のリンクにRestart=always にするとデーモン化に失敗してしまうと書いてあったので、代わりに以下のコードを試してみましたが、同様のエラーが生まれました。

/etc/systemd/system/pibot.service

[Unit] Description=pibot service [Service] ExecStart=/home/pi/hubot/pibot/bin/run_hubot.sh Restart = on-failure RestartSec=10s [Install] WantedBy=multi-user.target

2.run_hubot.shの実行確認
run_hubot.shが正しくない可能性を確認するために、ターミナルでシェルスクリプトの実行を行いました。

$cd ~/hubot/pibot/bin $. run_hubot.sh

上のコマンドの結果として、Slack上でHubotが起動したのを確認できたので、問題はpibot.service側にあるのではないかと考えています。ただ、その解決策はまだ見つかりません。

3.run_hubot.shの編集
アドバイスを受けて、run_hubot.shにexit 0を追記してみましたが、同様のエラーが出てしまいました。
/home/pi/hubot/pibot/bin/run_hubot.sh

#!/bin/sh cd /home/pi/hubot/pibot sudo -u pi bin/hubot --adapter slack exit 0
$cd /etc/systemd/system $sudo systemctl daemon-reload $sudo systemctl start pibot.service $systemctl status pibot ● pibot.service - pibot service Loaded: loaded (/etc/systemd/system/pibot.service; enabled; vendor preset: en Active: failed (Result: exit-code) since Thu 2021-02-18 14:02:25 JST; 18s ago Process: 1533 ExecStart=/home/pi/hubot/pibot/bin/run_hubot.sh (code=exited, st Main PID: 1533 (code=exited, status=203/EXEC) 2月 18 14:02:25 raspberrypi systemd[1]: pibot.service: Failed with result 'exit 2月 18 14:02:25 raspberrypi systemd[1]: pibot.service: Service RestartSec=100ms 2月 18 14:02:25 raspberrypi systemd[1]: pibot.service: Scheduled restart job, r 2月 18 14:02:25 raspberrypi systemd[1]: Stopped pibot service. 2月 18 14:02:25 raspberrypi systemd[1]: pibot.service: Start request repeated t 2月 18 14:02:25 raspberrypi systemd[1]: pibot.service: Failed with result 'exit 2月 18 14:02:25 raspberrypi systemd[1]: Failed to start pibot service.

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Hubot

HubotはGitHub社が開発したチャットbotのフレームワークです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。