MySQLAdminからWordPressのパスワードを変更する方法。役に立ったのでクリップ
『面白いとかそんなんじゃない
恋だよ、恋』
コナミが本気で現実に干渉する恋愛ゲームを作りやがった。やりたい(弱い)
MySQLAdminからWordPressのパスワードを変更する方法。役に立ったのでクリップ
『面白いとかそんなんじゃない
恋だよ、恋』
コナミが本気で現実に干渉する恋愛ゲームを作りやがった。やりたい(弱い)
前回のPHPで書いたGearman_Workerのプログラムをバックグラウンドで動かそうとするとプロセスが止まってしまう件ですが、これを解決する方法を探していて見つけたのが、PEARのSystem_Daemonというモジュールです。
これは要するに、PHPでデーモンみたいな動きをするプログラムを書けるよ! というマニアックなモジュールで、これを使えばPHPのCLI版のプログラムをバックグラウンドで動かし続けることが可能になります。個人的にはPHPはプロセス制御するには(perlなどと比べると)不向きな言語だと思っているので、よくこんなのPHPで作ったよなあという感じ。
System_Daemonを使ってWorkerを動かすようにしたのが以下のプログラムです。
#!/usr/bin/php -q
addAbility('hello');
$worker->beginWork();
} catch (Net_Gearman_Exception $e) {
System_Daemon::log(System_Daemon::LOG_INFO, $e->getMessage());
}
System_Daemon::stop();
?>
実行すると、System_Daemon::start() の後に書いたコードがバックグラウンドで実行されます。
実行時には(ubuntuでは)/var/log配下にログファイル(この場合はGearman_worker.log)を作るので、ここにアクセスするためにスクリプトはroot権限で実行する必要があります。
またSystem_Daemonには、/etc/init.d/ にプロセスの起動・終了スクリプトを自動的に作ってくれるちょっとお茶目な機能もあります。スクリプトの作り方はSystem_Deamonのサイトに詳しく書かれているので、必要に応じてどうぞ。面白いモジュールですね。
なお、ここまで書いておいて何なのですが、業務システムで使うならWorkerはやっぱり枯れているperlで書いた方が安全だよなあという気持ちになっています(オチ)。
現在ライブドアの4Gbps本を購入して読んでますが(いきなり)、第2章で紹介されていた Gearman を使ったキューイングシステムがたいへんに便利そうでした。なので、積極的にマネしていきたいと思ってます。
4Gbps本には perl を使ったサンプルが紹介されていましたけど、現在の業務では主に PHP を使っているので、Gearman の PHP 実装を使ったワーカーやクライアントが作れないか調べているところです。以下、今のところの調査報告。
Gearman のサーバ (gearmand) は、Ubuntu では apt-get で拾うことができるので、今回はそれを使用しました。
#sudo apt-get install gearman-server /etc/default/gearman-server の「ENABLED="false"」を "true" に変更 #sudo /etc/init.d/gearman-server start
PEARのモジュールとして公開されている Net_Gearman をインストールします。
#sudo pear install Net_Gearman-0.2.3
Net_Gearmanは、github でも公開されています。このページに書かれているお手本を見れば、使い方は判ると思います。
Net_Gearman は、ワーカーと実際に処理を実装するジョブを別のソースに分けて書く必要があります。
Net_Gearman_Workerでワーカーを作り、addAbilityでジョブ名を登録、beginWorkでクライアントからのジョブの待ち受けを開始、みたいな流れ。
addAbility('hello');
$worker->beginWork();
} catch (Net_Gearman_Exception $e) {
echo $e->getMessage() . "\n";
exit;
}
?>
#php gearman_worker.php
なお、「php gearman_worker.php &」とやってバックグラウンドで動作させるとそこでプロセスが止まってしまい、フォアグラウンドに戻してあげないとクライアントからの呼びかけに応答してくれませんでした。CLI版PHPの仕様?
ワーカーから呼び出されるジョブですが、
記述する必要がある様です。Net/Gearman/Job は、ワーカープログラムから見える場所(includeのパス)に存在していないといけません。
なので、とりあえず今回は gearman_worker.php を置いたディレクトリに Net/Gearman/Job というディレクトリを作り、その下に hello.php を置くようにしました。
また、ジョブは
である必要があります。そのクラスの run という関数(メソッド)に、実際の処理を書きます。
クライアントはNet_Gearman_Clientを作ってジョブ名をメソッドとして記述することで、指定したジョブをバックグラウンドで実行します。ジョブには配列の形でデータを渡せます(内部的には JSON に変換しているらしい)。
hello(array('name' => 'World'));
?>
gearman_client.php を実行し、gearman_worker.php を実行しているコンソールに「Hello, World!」と表示されれば、我々の勝ちです。
とりあえずこんな形で PHP でワーカー+ジョブとクライアントを記述できますが、ワーカーをバックグラウンドで動かすと止まっちゃうので、そのままではジョブを PHP で書くのはあまり現実的ではないかなと思いました。
クライアントは上記の通りえらい簡単に書けるので、ワーカー+ジョブはperlで、クライアントはPHPでという形で運用するのが無難かと思います。perl+PHPの運用は、こちらの記事がとても参考になります。
(次回予告:System_Daemonを使ってNet_GearmanのWorkerをバックグラウンドで動かす)
29日に行われた池袋での党首演説対決のスレなんだけど、>>806の両党首の必死な写真が面白すぎるのでクリップ
ラブプラスのレビュー記事。2000年代最後に現れた「ときメモ」を継ぐゲームという印象。携帯機を持ち歩いて「彼女」との一体感を増すというアイデアを実装するところがすごい。コナミは本気だ
VAIO P以来の話題を巻き起こしているシャープのNetWalkerのレビュー記事。キー配列が変則的なのはこの手のデバイスの宿命なれど、キータッチに難があるとの指摘。ネット端末としては問題なしっぽい。テキスト入力マシンには不向きってことでしょうね