
スクリプト経由で開始するとプロセスが機能しないのに、手動で開始すると正常に機能する理由を解明しようとしています。
詳細は次のとおりです。
スクリプトはresqueワーカーの起動スクリプトです。スクリプトの場所は/etc/monit/conf.d/start_resque.shです。権限は755で、所有者はubuntu:ubuntuです。
スクリプトを実行すると、ログ出力に pid が取得され、「starting worker ip-xx-xxx-xxx-xx:26732 (または pid が何であれ)」と表示されますが、ps aux | grep 26732 を実行すると、実行中として何も表示されません。 Rails プロジェクト ディレクトリでまったく同じコマンドを手動で実行すると、同じ「starting worker」出力が表示され、プロセスが実際に開始されて実行され続けます。 1 つ注意すべき点は、手動で開始すると、追加の出力が表示されることです: 「nohup: 入力を無視しています」
誰かが助けてくれるかもしれないもう一つの質問は、なぜ BACKGROUND=yes が実際にはワーカーをデーモン化しないのかということです...そのため、私は nohup に頼っていますが、これは問題なく動作するようです。
これが私のスクリプトです (手動で実行するコマンドは cd の後にあります):
#!/bin/bash
echo "starting worker.."
workercount="$(ps aux | grep -c resque)"
currentdir="/var/www/apps/myapp/current"
logdir=$currentdir/log/resque_worker.log
pidfile=$currentdir/tmp/pids/resque_worker_$workercount.pid
cd $currentdir
nohup bundle exec rake environment resque:work RAILS_ENV=production QUEUE='*' VERBOSE=1 PIDFILE=$pidfile >> $logdir 2>&1 &
echo "started worker $workercount! view log at $logdir. view pidfile at $pidfile"
追加メモ: Ubuntu 12.04 で、ssh
スクリプトと手動コマンドの両方を実行しているときに接続しています。
答え1
わかりました。Sidekiq に切り替えましたが、"問題なく動作します"。resque とデプロイに手間取って多くの時間を無駄にしましたが、経験値を獲得し、システム管理者のスキルがほぼレベルアップしました。Sidekiq はより良い選択肢のようです。スレッドを活用し、優れた wiki、更新された Web インターフェイス、プロ オプション、ホームページの非常にクールな忍者アイコンを備えています。