irc.cre.jp系IRCサーバ群の公式ボット、「Toybox」「Role」で使用しているIRCボットフレームワーク、RGRB。
今回は、これをCentOS7などで採用されているsystemdで制御してみます。
systemd
UNIX系のOSでシステムの大本となるプログラム(init)の1つで、RHEL7やそのクローンであるCentOS7をはじめ、SuSE LinuxやArchLinuxなどの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で管理するほかのデーモンと変わりません。
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」と指定するといいでしょう。
サンプルのままでしたら、例えば上のようにすると、実際にはこのようなコマンドが発行されプログラムが起動します。
また、PIDファイルは /home/irc/rgrb/toybox.pid に保存されます。
code
more code
~~~~