ruby-on-rails - 当sidekiq崩溃时如何重新启动它?
问题描述
我通过以下方式启动了sidekiq
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
有时,Sidekiq 被压垮了,busy=0 并且 enqueue > 0。
如何设置 sidekiq 在压碎/停止后重新启动?
解决方案
您可以使用一些自动化软件包,或编写自己的 bash 脚本来执行此操作。
我个人更喜欢编写自己的脚本,所以让我解释一下:
- 如果尚未运行,则编写一个执行 sidekiq 的脚本
- 编写一个 cronjob 每分钟执行一次该脚本
请注意,此方法不是 Instant,这意味着您可能会停机长达 1 分钟,因为 cronjob 每分钟都在工作。因此,如果您的项目对此敏感,您可能希望使用其中一种流程管理工具,例如monit
或god
。
你的 bash 脚本应该包含你的命令,
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
但是,如果要将脚本存储在项目目录之外,请确保使用绝对路径。
这是有关编写 shell 脚本以检查进程是否已存在的有用主题。
要每分钟运行一次脚本,请执行以下操作:
- 转到您的终端
- 类型
crontab -e
- 附加
* * * * * /bin/bash -l -c 'cd /PATH/TO/YOUR/DIR && sh SCRIPTNAME.sh'
- 保存并退出编辑器
通过这样做,您告诉您的计算机每分钟执行一次您的脚本。通常人们更喜欢只写到* * * * * /path/to/script.sh
他们的 crontab,但在某些情况下这会失败。
希望这可以帮助。
推荐阅读
- c++ - 将枚举与 CMake 链接的正确方法是什么?
- javascript - 如何区分css中filter的不同属性?
- jquery - 如何正确使用 jQuery 扩展
- r - 如何优化矩阵中行和列的交集?
- c# - 我可以使用 IEnumerator 作为更新函数吗?
- python-2.7 - 如何在 python 列表中添加非 ASCII 字符?
- javascript - 如何过滤 JSON 数组,在 keyup 处使用 eventListener 输入值
- powershell - 根据powershell中的大小将一个大的csv文件拆分成多个csv文件
- javascript - 从 JSON 阅读器读取时发现意外的“StartObject”节点。需要一个“PrimitiveValue”节点
- c++ - __declspec 裸机上的 memcpy 返回意外字节