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 stoprestart sidekiq 的不同选项上使用上述命令

例如systemctl restart sidekiq

【讨论】:

以上是关于Rails:如何重启sidekiq?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6 应用程序如何将 Sidekiq+Redis 用于 Hotwire/Stimulus,而将 DelayedJob 用于“工人工作”,例如电子邮件

如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?

如何使用 Sidekiq 运行连续的后台作业?

如何将 ApplicationMailer(或 ActionMailer)设置为默认使用 Activejob/sidekiq

如何确保 Sidekiq 后台作业针对它们启动的同一数据库运行

我如何使用Sidekiq运行连续的后台作业?