Rails:如何重启sidekiq?
Posted
技术标签:
【中文标题】Rails:如何重启sidekiq?【英文标题】:Rails: How to restart 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)。 【参考方案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
【讨论】:
以上是关于Rails:如何重启sidekiq?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 6 应用程序如何将 Sidekiq+Redis 用于 Hotwire/Stimulus,而将 DelayedJob 用于“工人工作”,例如电子邮件
如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?
如何将 ApplicationMailer(或 ActionMailer)设置为默认使用 Activejob/sidekiq