有谁知道如何找到sidekiq的pidfile来优雅地关闭它? 运行ps ax | grep sidekiq
,然后运行sidekiqctl stop <pid from grep>
始终给出no such pidfile
错误? Cntl-C和Cntl-D似乎也没有效果。优雅地关闭sidekiq进程
关闭进程窗口并重新打开一个新窗口不会终止进程,因为它看起来像一个守护进程运行。
我发现唯一一致的修复方法是重新启动。
有谁知道如何找到sidekiq的pidfile来优雅地关闭它? 运行ps ax | grep sidekiq
,然后运行sidekiqctl stop <pid from grep>
始终给出no such pidfile
错误? Cntl-C和Cntl-D似乎也没有效果。优雅地关闭sidekiq进程
关闭进程窗口并重新打开一个新窗口不会终止进程,因为它看起来像一个守护进程运行。
我发现唯一一致的修复方法是重新启动。
只是一直在寻找到这一个我自己...
好像Sidekiq较新版本的这个建于:
https://github.com/mperham/sidekiq/wiki/Signals
杀-USR1 [PROCESS_ID]
对我很好。工作人员停止接受新工作,但完成了他们的工作,然后在完成后终于完成了这一过程。
杀-TERM [PROCESS_ID]
尝试使用神监视sidekiq。
然后,所有你需要做的是捆绑高管神停止
或者,你可以使用: sidekiqctl停止60
'sidekiqctl stop
Sidekiq提供了指定在启动时一个pidfile进程文件的能力,或者,如下图所示,在进程启动后创建pid文件。无论哪种情况,您都可以在停止时使用pidfile。
ps -ef | grep sidekiq
找到PIDsidekiq.pid
),唯一的内容是将PID你刚刚发现sidekiqctl stop <pidfile_name>
-P <pidfile_name>
或--pidfile <pidfile_name>
在未来开始sidekiq时用这个强行杀死sidekiq。
ps -ef | grep sidekiq | grep -v grep | awk '{print $2}' | xargs kill -9
如果使用'ps -ef | grep sidekiq | grep -v grep | awk'{print $ 2}'| xargs杀死-TERM's sidekiq将给予时间暂停工人。 'sidekiqctl stop'命令是[抽象](https://github.com/mperham/sidekiq/blob/master/bin/sidekiqctl#L70) – Francisco
如果你喜欢bashes ...
脚本/ 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)
注:
我写了一个可以启动或停止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应用程序,您还可以设置$ PROJECT_DIR静态变量,这样你就不需要每次指定路径。希望这可以帮助!
共享一个bash脚本,检查sidekiq是否正在运行,并将它发送给TSTP,要求它不要拾取任何新的作业,等待任何正在运行的作业完成,然后通过向其发送TERM信号来停止该进程。
https://gist.github.com/kamilbednarz/5ea6398af2a7537aa8feb5a63f3acf2f
杀 'PROCESS_ID' 工作得很好,杀死进程。虽然然后重新启动sidekiq它找不到redis。 – user1627827
此外,'kill-term pid'会使它在接下来的10秒内优雅地关闭。 –