展開プロセスで Beanstalkd を使用したいと考えています。この考え方は、IGN が使用するもの ( https://github.com/ign/brood )に似ています。いつでも 2 つのクライアントをトリガーして、最新のコードをダウンロードし、Apache を再起動したい場合があります。複数のワーカー (クライアントごとに 1 つ) が同じキューを処理することは可能ですか? 回避策として、クライアントごとにキューを作成できます。
質問する
796 次
1 に答える
0
そのクライアントのコマンドに使用される、クライアントごとの特定のキュー。それらすべてに独自のキューをリッスンさせ、必要な数のクライアントに単純な「RESTART」メッセージを送信します。
ジョブを開始し、実際の再起動を実行し続けるbashスクリプトが必要です。スクリプトを作成する必要があるのは
- 「RESTART」メッセージを削除します(そうしないと、次回同じメッセージが表示されます)
exit(90);
スクリプト
戻り値は Bash スクリプトによって取得され、アクションが実行されます。
#!/bin/bash
# runBeanstalkd-worker.sh
# a shell script that keeps looping until an exit code is given
# if it does an exit(0), restart after a second - or if it's a declared error
# if we've restarted in a planned fashion, we don't bother with any pause
# and for one particular code, exit the script entirely.
# The numbers 97, 98, 99 must match what is returned from the PHP script
nice php -q -f ./cli-beanstalk-worker.php -- $@
ERR=$?
## Possibilities
# 90 - restart apache
# 97 - planned pause/restart
# 98 - planned restart
# 99 - planned stop, exit.
# 0 - unplanned restart (as returned by "exit;")
# - Anything else is also unplanned paused/restart
# 90 - restart apache
if [ $ERR -eq 90 ]
then
service apache restart
sleep 5;
exec $0 $@;
fi
if [ $ERR -eq 97 ]
then
# a planned pause, then restart
echo "97: PLANNED_PAUSE - wait 1";
sleep 1;
exec $0 $@;
fi
#### other actions, like planned-restart, or shutdown
# unplanned exit, pause, and restart
echo "unplanned restart: err:" $ERR;
echo "sleeping for 1 sec"
sleep 1
exec $0 $@
于 2013-09-28T08:35:09.807 に答える