日報 #78 - gearman 1.1.12をUbuntu 12.04へ
コンピュータにクオリアがないなんて、そんなこと分からないわけです。
苦労して設定したサーバが問題なく動いている様子を眺めながら、
思慕の念が強まっていくのを感じる今日此の頃です。
さて、今日はgearmandのお話。
この時点でかなり離脱率を叩き出すと思いますが、
最終コミット2014年2月と、中々の運用っぷりです。
レガシーなんて言わせません。
今日はたまたまUbuntu 12.04LTSへGearman 1.1.12を突っ込む機会に恵まれたのでその辺について。
いっろいろ問題がおきますが、
成功パターンのみを共有させていただきます。
さあさっそくシェル群を。
// 事前準備 // 依存関係リスト http://gearman.info/build/ubuntu.html sudo apt-get update sudo apt-get install gcc autoconf bison flex libtool make libboost-all-dev libcurl4-openssl-dev curl libevent-dev memcached uuid-dev libsqlite3-dev libmysqlclient-dev // 1.1.12 DL wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz tar xvzf gearmand-1.1.12.tar.gz cd gearmand-1.1.12 sudo ./configure sudo make sudo make install sudo ldconfig // gearman apps apt-get install gearman gearman-job-server gearman-tools libgearman6 libgearman-dev // extension include // conf.dのpathは適当 echo "extension=gearman.so" > /etc/php5/cli/conf.d/gearman.ini echo "extension=gearman.so" > /etc/php5/apache2/conf.d/gearman.ini
一旦ここまで。
で、gearmand自体がまれに落ちるという恐怖があるため、daemontoolに監視させます。
runスクリプトでの呼び出しが要注意なんですが、、、
// なんとなくdaemonに食わせる重要なのはexecのあたり mkdir ~/service mkdir ~/service/gearman sudo echo "#!/bin/sh \n exec /usr/local/sbin/gearmand --log-file=/var/log/gearman-job-server/gearman.log" 1>~/service/gearman/run sudo chmod +x ~/service/gearman/run sudo ln -s ~/service/gearman /service/gearman
結論だけ書くと簡単なんですが、
なんか知らないけどやたら
gearmand[xxx]: ERROR [ x ] Failed while in _connection_read() -> libgearman-server/io.cc:489
gearmand[xxx]: WARNING [ x ] lost connection to client recv(peer has closed connection) 127.0.0.1:xxxx
こんなようなエラーをくらいました。
恐らく原因はgearmandの立ち上げ方法で、
ちょっと前のバージョンでやられてた(可能性のある)
setuidgid gearman /usr/sbin/gearmand ....
のやり方ですと、
localhostのポートリンクを瞬間的に2回探索してしまうために、エラーがでるようです。
しっかりポートを確認すれば分りますが、
sudo lsof -i tcp:4730
ワーカーphpが4730に向けてポートエステイブリッシュしている様子がみれますが、
エラーに書きだされるportナンバーと異なるわけです。
なぜかそういうエラーがでるみたいなので、gearmanの起動方法については注意しましょう。
以上です。
あぁ、播磨灘。