irc.cre.jp系IRCサーバ群の公式ボット、「Toybox」「Role」で使用しているIRCボットフレームワーク、RGRB

今回は、これをCentOS7などで採用されているsystemdで制御してみます。

systemd

UNIX系のOSでシステムの大本となるプログラム(init)の1つで、RHEL7やそのクローンであるCentOS7をはじめ、SuSE LinuxArchLinuxなどのLinuxディストリビューションで採用が始まっています。

これまでクリエイターズネットワークではCentOS6が主に使われていましたが、新しく追加されたり、構築され直されたりしているサーバーではCentOS7を採用し始め、RGRBを動かしているサーバーも先日CentOS7で再構築を行ないました。

ちなみに、再構築前のCentOS6環境では、Upstartからsupervisordを起動し、supervisordでRGRBをデーモン化して管理していました。

設定方法

RGRB本体のインストール

RGRB用に専用のユーザー “irc” を作成し、このユーザーの権限でプログラムを起動することにします。

$ sudo useradd irc -s /bin/bash
$ sudo su - irc -s /bin/bash
[sudo] password for YOUR-ACCOUNT: ********
$ git clone https://github.com/cre-ne-jp/rgrb.git

ユーザーを作成し、そのホームディレクトリ以下に GitHub からRGRBをクローンします。もちろんアーカイブ形式のファイルをダウンロードして展開してもかまいません。

設定ファイルをテンプレートの config/rgrb.yaml から適宜書き換え、保存します。終わったら専用ユーザーからはログアウトしてかまいません。

systemdの設定 (通常の場合)

今度はsystemd用のサービスファイルを用意します。

https://github.com/cre-ne-jp/rgrb/blob/master/doc/system/rgrb.service

RGRB の git リポジトリ内、doc/system/ にサービスファイルの例を置いてあります。
サービスファイルを用意したら、実際に使用する環境にあわせて書き換えます。

管理者権限で /etc/systemd/system/rgrb.service にファイルを保存したら、次のコマンドでsystemdを再読み込みし、サービスを認識させます。認識したか確認しましょう。

$ sudo systemctl daemon-reload
$ sudo systemctl status rgrb
rgrb.service - RGRB - Internet Relay Chat bot
   Loaded: loaded (/etc/systemd/system/rgrb.service; enabled)
   Active: inactive (dead)
     Docs: http://www.cre.ne.jp/services/irc/bots/rgrb

このように表示されたらサービスはきちんと読み込めています。

デーモンとしての起動・終了は、systemdで管理するほかのデーモンと変わりません。

$ sudo systemctl start rgrb
$ sudo systemctl stop rgrb

startで起動、stopで終了です。

テンプレートサービスファイルでの設定

irc.cre.jp系IRCサーバ群には公式ボットが2つあり、その両方でRGRBを利用しています。設定ファイルを2つ用意するのは面倒ですので、実際にはテンプレートサービスファイルでRGRBを管理しています。

<テンプレート名>@<識別文字列>」という形式でサービスを管理し、2つ(以上)のRGRBを起動してもsystemdのサービスファイルは1つで済むようになります。
ただし、NICKや読み込むプラグインなどの設定が異なるため、RGRBの設定ファイルは起動する数だけ必要です。

テンプレートサービスファイルは、通常のサービスファイルと同じようにsystemdのディレクトリに設置しますが、拡張子(.service)の直前に「@」を書かなくてはいけません。例えば、「rgrb@.service」などになります。
こちらも、 RGRB のリポジトリ内に例があります。

テンプレートサービスファイルの中では、「%I」と記述すると、<識別文字列>に置き換えられて実際のプログラムを起動します。ですので、例えばPIDやExecStartなどで指定するPIDファイルやRGRBの設定ファイルを「%I」と指定するといいでしょう。

$ sudo systemctl start rgrb@toybox

サンプルのままでしたら、例えば上のようにすると、実際にはこのようなコマンドが発行されプログラムが起動します。

/home/irc/rgrb/bin/rgrb-ircbot -c config/toybox.yaml

また、PIDファイルは /home/irc/rgrb/toybox.pid に保存されます。

参考文献