Sidekiqのpidfileを見つけて正常にシャットダウンする方法を知っている人はいますか?ランニング ps ax | grep sidekiq
を実行してからsidekiqctl stop <pid from grep>
は常にno such pidfile
エラー? Cntl-CとCntl-Dも効果がないようです。
プロセスウィンドウを閉じて新しいウィンドウを再度開いても、デーモンとして実行されているように見えるため、プロセスは強制終了されません。
私が見つけた唯一の一貫した修正は再起動です。
これを使用してsidekiqを強制終了します。
ps -ef | grep sidekiq | grep -v grep | awk '{print $2}' | xargs kill -9
Sidekiqは、開始時にpidfileを指定する機能、または以下に示すように、プロセスの開始後にpidfileを作成する機能を提供します。どちらの場合も、停止時にpidfileを使用できます。
ps -ef | grep sidekiq
pidを見つけるsidekiq.pid
)唯一の内容は、あなたが見つけたばかりのpidです。sidekiqctl stop <pidfile_name>
-P <pidfile_name>
または--pidfile <pidfile_name>
将来sidekiqを開始するときちょうどこれを自分で調べていました...
Sidekiqの新しいバージョンにはこれが組み込まれているようです:
https://github.com/mperham/sidekiq/wiki/Signals
kill -USR1 [PROCESS_ID]
私にとってはうまくいきました。労働者は新しい仕事を拾うのをやめましたが、彼らが働いていた仕事を終えました、そしてそれが終わったときに私は最終的にプロセスを殺しました。
kill -TERM [PROCESS_ID]
Sidekiqを開始または停止できる小さなハンドラーを作成しました。
start_stop_sidekiq.sh
#!/bin/bash
cmd=$1
PROJECT_DIR=$2
PIDFILE=$PROJECT_DIR/tmp/pids/sidekiq.pid
cd $PROJECT_DIR
start_function(){
LOGFILE=$PROJECT_DIR/log/sidekiq.log
echo "Starting sidekiq..."
bundle exec sidekiq -d -L $LOGFILE -P $PIDFILE -q mailer,5 -q default -e production
}
stop_function(){
if [ ! -f $PIDFILE ]; then
ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}' > $PIDFILE
fi
bundle exec sidekiqctl stop $PIDFILE
}
case "$cmd" in
start)
start_function
;;
stop)
stop_function
;;
restart)
stop_function && start_function;
;;
*)
echo $"Usage: $0 {start|stop|restart} /path/to/Rails/app"
esac
保存して、「chmod +x start_stop_sidekiq.sh
」と入力します。次に、それを実行します:
bash start_stop_sidekiq.sh start /path/to/your/Rails/app
または
bash start_stop_sidekiq.sh stop /path/to/your/Rails/app
Railsアプリが1つしかない場合は、$ PROJECT_DIR変数を静的に設定して、毎回パスを指定する必要がないようにすることもできます。これがお役に立てば幸いです!
茂みが好きなら...
scripts/stop_sidekiq.sh
#!/bin/bash
DIR="$( cd "$( dirname "$0" )" && pwd )"
PROJECT_DIR=$DIR/../ # EDIT HERE: rel path to your project form this file location (my scripts are in ./scripts/)
SIDEKIQ_PID_FILE=$PROJECT_DIR/tmp/pids/sidekiq.pid # EDIT HERE: pid file location
if [ ! -f $SIDEKIQ_PID_FILE ]; then
# if no pid file, retrieve pid and create file
ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}' > $SIDEKIQ_PID_FILE
fi
(cd $PROJECT_DIR && bundle exec sidekiqctl stop $SIDEKIQ_PID_FILE)
ノート:
Godを使用してsidekiqを監視してみてください。
次に、実行する必要があるのは、exec god stopをバンドルすることだけです。
または、次を使用することもできます。sidekiqctl stop 60
Sidekiqが実行されているかどうかをチェックし、TSTPを送信して新しいジョブを取得しないように要求するbashスクリプトを共有し、実行中のジョブが完了するまで待機してから、TERMシグナルを送信してプロセスを停止します。
https://Gist.github.com/kamilbednarz/5ea6398af2a7537aa8feb5a63f3acf2f