【问题标题】:Rails: How to restart sidekiq?Rails:如何重启sidekiq?
【发布时间】:2014-08-18 05:30:09
【问题描述】:
我正在使用 sidekiq gem 在后台运行 API 调用。我在守护进程中运行了 sidekiq,例如:
bundle exec sidekiq -d
现在我对方法进行了一些更改,所以我想重新启动 sidekiq。我尝试使用以下命令杀死 sidekiq:
kill -9 process_id
但它不起作用。我想知道重启sidekiq进程的命令。如果您有任何想法,请与我分享。
我也尝试了以下命令:
sidekiqctl stop /path/to/pid file/pids/sidekiq.pid
【问题讨论】:
-
-
请参阅this answer,了解有关优雅关闭 Sidekiq 的提示,以及以更容易关闭 Sidekiq 的方式启动它(剧透:pidfile)。
标签:
ruby-on-rails
ruby
ruby-on-rails-3
sidekiq
【解决方案1】:
所以在找到 PID 后,您可以使用以下命令:第一个命令将阻止工作人员获得新工作并让现有工作完成:
kill -USR1 [PID]
之后,您可以使用以下命令终止进程:
kill -TERM [PID]
此外,sidekiq/wiki 上有一个关于此的页面,称为 Signals。
[编辑]
Here是信号页面。
[编辑]
查看video
查找可以使用的 PID:
ps 辅助 | grep sidekiq
【解决方案2】:
为了让守护程序保持运行,您肯定应该在 HardWorker 类中进行一些良好的错误处理,但如果在系统进程中找不到 Sidekiq 运行程序,您也可以使用以下命令重新启动它们。
x=`ps aux | grep sidekiq | grep -v grep | awk '{print $2}'`; [ "$x" == "" ] && cd /path/to/deploy && bundle exec sidekiq -d -L /path/to/deploy/log/sidekiq.log -C /path/to/deploy/config/sidekiq.yml -e production
这基本上使用ps aux | grep sidekiq | grep -v grep | awk '{print $2}' 查找PID,然后将其存储在变量x 中。然后,如果它是空的,它将运行一个守护进程。
您可以让这个人从事 cron 工作或其他工作。但是,如果您的工作不断失败,您肯定想找出原因。
编辑:添加了从 cron 部署的路径。
【解决方案3】:
开始:
$ bundle exec sidekiq -d -P tmp/sidekiq.pid -L log/sidekiq.log
-d 妖魔化,-P pid 文件,-L 日志文件。
停止:
$ bundle exec sidekiqctl stop tmp/sidekiq.pid 0
Sidekiq shut down gracefully.
0 是等待 Sidekiq 退出的秒数。
【解决方案4】:
- 输入以下命令:
ps -ef | grep sidekiq
这给出了在后台运行 sidekiq 进程的 process_id 和其他详细信息。
- 复制 process_id 并使用以下命令:
杀死 process_id
- 使用以下命令在后台使用 -d 选项再次启动 sidekiq:
bundle exec sidekiq -d -L log/sidekiq.log
【解决方案5】:
systemctl {start,stop,restart} sidekiq
在服务器上的 start stop 和 restart sidekiq 的不同选项上使用上述命令
例如systemctl restart sidekiq