botに命令してRaspberry Piを再起動するには Rocket.Chat版

先日、Raspberry PiにRocket.Chatサーバをインストールしました。

さらにhubotを自動起動するように設定し、botを動かせる環境を作成しました。

たとえばスマートフォンからRaspberry PiのRocket.Chatサーバへ接続し、botへ命令を出して、Raspberry Piを再起動するにはどうすれば良いでしょうか?

設定手順を記録しておこうと思います。


Raspberry Piの再起動bot作成手順

1. Rocket.Chatのインストール

こちらの記事にて、Rocket.Chatサーバをインストールしました


2. Hubotのインストール

Rocket.ChatでHubotが動くように設定しました。


3. 再起動スクリプトの作成

再起動用のスクリプトを作成します。

cd hubot-rocketchat-boilerplate
vi scripts/reboot.js

次のような内容です。

// Description:
//    reboot machine script.
//
// Commands:
//    bot reboot machine - Begin rebooting
//    bot restart machine - Begin rebooting
//

module.exports = (robot) => {
  robot.respond(/(reboot machine|restart machine)/gi, (res) => {
    require('child_process').exec('sudo /sbin/shutdown -r now',
            function (msg) {
                    res.reply(msg);
            });
  })
}

child_processモジュールを使用して、shutdownコマンドを実行するかたちです。

スクリプトを作成する際、DescriptionとCommandsのコメントを書いておくと、hubot helpで使用方法を表示できるようです。後で作ったスクリプトがわからなくならないように、ちゃんと書いておいたほうが良さそうですね。


4. 使用するモジュールのインストール

child_processモジュールをインストールしておきます。

npm install child_process --save


5. Hubotの再起動

これで準備が整いました。あとはHubotを再起動すれば。

sudo systemctl restart rocketchat_hubot.service

作成したスクリプトが動作するようになります。


bot helpと入力すると、先程作成した再起動用のスクリプトが表示されるようになりました。

bot reboot machineまたはbot restart machineと入力すると、Raspberry Piが再起動しました。

再起動ではなくシャットダウンしたい場合、よろしければ記事の末尾のスクリプトをご利用下さい。

他にもサービスの再起動やログの閲覧など、よく利用するコマンドをbot化しておくと便利かと思います。


botスクリプトの覚書

Raspberry PiのCPU温度表示

// Description:
//    Display a cpu temperature.
//
// Commands:
//    bot cputemp - display cpu temperature
//

module.exports = (robot) => {
  robot.respond(/(cputemp)/gi, (res) => {
    require('child_process').exec('echo "scale=3;`cat /sys/class/thermal/thermal_zone0/temp` / 1000" | bc -l',
            function (err, stdout, stderr) {
                    res.reply(stdout);
            });
  })
}

シャットダウン

// Description:
//    shutdown machine script.
// 
// Commands:
//    bot shutdown machine - Begin shutdown
//    bot halt machine - Begin shutdown
//

module.exports = (robot) => {
  robot.respond(/(shutdown machine|halt machine)/gi, (res) => {
    require('child_process').exec('sudo /sbin/shutdown -h now', 
	    function (msg) { 
		    res.reply(msg);
	    });
  })
}

スポンサーリンク

フォローする

スポンサーリンク