前提・実現したいこと
以下のサイトを参考にして、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/hubot
とpibot 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.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/10 11:04
2021/02/11 08:54
2021/02/12 07:57
2021/02/15 08:02
2021/02/16 07:26
2021/02/16 08:05
2021/02/18 04:59 編集
2021/02/19 02:18
2021/02/20 12:39
2021/02/22 07:40
2021/02/26 12:25
2021/03/01 00:43
2021/03/02 05:34