Gearman
インストール(peclのインストールのためにgccを入れる場合には少し時間がかかる)
yum install php-gearman* *gearman*
pecl install gearman
設定
vi /etc/php.ini
extension=...
DB作成(メモリかsqliteにするほうがいいかと思いつつ。。)
CREATE DATABASE gearman;
CREATE TABLE queue (
unique_key VARCHAR(255),
function_name VARCHAR(255),
priority INT,
data LONGBLOB,
when_to_run BIGINT,
unique key (unique_key, function_name)
);
vi /etc/sysconfig/gearman
OPTION=" -q MySQL --mysql-user=… --mysql-password=… --mysql-db=gearman --mysql-table=queue "
ログローテートとかchkconfigとか
chkconfig ...
/var/log/gearman.log {
missingok
weekly
notifempty
nocompress
}
supervisior
いんすと。。(後述だがpipでインストールする)
yum install supervisor
せってい。。
vi /etc/supervisord.conf
[program:…-01]
略
[program:…-02]
略
ろぐろーてーととか、、
略
やってみてどうだったかとか
苦労したのがsupervisior。
複数プロセスの設定で、設定ファイルがバージョンでだいぶ違ったりsocketファイルのファイル権限とか。。
やりやすさで、yumのバージョンで、多分ちょっと古いやりかたを採用。numprocとか使いたかった。。
あとはfuelPHPからきゅーしました。
追記:
この後、exit 1などの終了コードでプロセス監視が途絶えてしまうことが課題となり、pip installで3.0をインストールして、オプション設定することで対応できた。easy_installではなくpipでinstallしたらうまくいった気がいする。今回virtualenvは使わなかった。numprocをつかえるようになって便利になって良かった。
追記:
gearmanのcpuの占有がタスクが無くても大きくなっていたかもしれない。
バッチでのタスクを無くしても占有率が高かった。
再起動したら解消された。まあ、移行したからいらないんだけど。
追記:
service supervisord restartだと失敗するときがある。
プロセスの再起動だけならsupervisorctl restart hoge
supervisorctl status 子プロセスの様子を見る
supervisorctl stop 子プロセスを停止する
supervisorctl start 子プロセスを開始する
supervisorctl restart 子プロセスを再起動する
supervisorctl reload Supervisord自体を再起動する
supervisorctl reread 設定ファイルを読みなおして変更を反映させる
supervisorctl avail 全プロセスの情報を表示
参考:
PHP+Kestrel+Supervisorでお手軽タスクキューイング
http://blog.asial.co.jp/875
http://cultureeen.hatenablog.jp/entry/2014/05/11/155933
http://yulii.net/entries/54
http://qiita.com/yushin/items/15f4f90c5663710dbd56