beanstalkdをopenSUSEで動かす

タグ: Laravel4   OpenSUSE   Linux  

Laravelの開発では、動作環境を簡単にセットアップできるHomestead公式Vagrant boxがありますので、準備は簡単です。でも、実働マシーンがいつもUbuntuというわけでもありません。

Homesteadは簡単なのですが、せっかく開発にLinuxデスクトップを使用しており、いろいろ便利ツールが整っているローカル環境のほうが、開発しやすいのは目に見えています。初心者のうちは「環境を整えるのは面倒」という言葉は真実ですが、ある程度できるようになっても宣伝文句に使われるこの言葉が刷り込まれたままで、本当は簡単なのに、試さずに諦めることになりがちです。面倒なものもありますが、やってみれば簡単なインストールや設定はたくさんあります。

Laravelがサポートしてるキューシステムの一つ、beanstalkdは大抵のディストリビューションでは公式リポに入っていますが、openSUSEでは個人の公開リポにもありません。まあ、簡単にmakeできるので、わざわざ公開する必要もないようです。openSUSEでもRabbitMQパッケージはあります。こちらは厳密にはメッセージキューで、ワークキューではないようです。(RabbitMQのキュードライバーは、有志の手で作成されたものがcomposerでインストールできます。バージョン5移行もメンテされるのかが不安なため、今回は見送りました。)

beanstalkdのmake

公式リポに用意されていなくても、実行形式をmakeするのは簡単です。もちろん、基本的な開発ツールはインストールしておく必要はあります。

まず、ダウンロードページの一番上、"source"に指定されているリンクから、最新のソースを取得します。tar.gz形式の圧縮ファイルですので、解凍し、作成されたディレクトリーへ移動します。

makeは標準的な手順です。

make
make install

これで作成終了です。

デーモンとしてサービスに追加

リポに存在してあれば、通常はupstartかsystemdで使用できるように、パッケージが設定されていることが多いでしょう。残念ながらopenSUSEではパッケージングされていないので、当然このような設定は自前で行います。

どうせなら落ちたり、殺されても復活する、起き上り小法師デーモンとして登録しましょう。外部からの死活監視の手間が省けます。

Debianもsystemdの採用を決めたようです。人気はあるが変わり者のUbuntu以外、起動の仕組みにはsystemdが採用されているようで、openSUSEも同じです。仕組みは皆同じでしょう。多分、他のディレクトリービューションでも、同じ方法で登録できると思います。

永続化と言う言葉は対象が曖昧で、プロセスがずっと続くことも永続化です。今回は2つの永続化を行います。一つは前述の「起き上り小法師プロセス」の永続化です。これはsystemdにより設定します。

もうひとつの意味合いは、beanstalkd自身の仕組みとして、通常のモードではオンメモリでジョブを取り扱うため、そのままではプロセス(デーモン)が死んだ時に、溜まっていたジョブが全部消えてしまいます。そこで、指定ディレクトリー下にファイルの形でキューを残して、生き返った時にジョブが継続できるようにコマンドオプションで指定できます。実用とするには、もちろんこの形態で運用します。

このジョブ情報を保存しておく、ディレクトリーを先に作成しておきましょう。ルートユーザーになりましょう。(sudo su)

mkdir -p /var/lib/beanstalkd

/etc/systemd/system/beanstalkd.confに以下の内容でファイルを作成してください。

[Unit]
Description=Beanstalkd work queue

[Service]
ExecStart=/usr/local/bin/beanstalkd -l 127.0.0.1 -p 11300 -b /var/lib/beanstalkd 
Restart=always

[Install]
WantedBy=multi-user.target

ExecStartで、起動コマンドをオプションと同時にしています。-bでジョブの永続化のために、保存ディレクトリーを指定しています。

Restart=alwaysで、起き上り小法師デーモンにしています。

WantedBymulti-user.targetは、レベル3(マルチユーザー)で起動することを指定しています。

さて、これで動きました。まだ、実働テストとログの出力は試していません。そのうち、追記しておきます。