杀死服务的额外实例并获得有关它们的通知

杀死服务的额外实例并获得有关它们的通知

我的服务器上运行着 2 个 Ruby-on-Rails 应用程序。它们的部署是通过 Capistrano 实现自动化的。该应用程序使用 Sidekiq 来处理后台作业。

我为我的 2 个应用程序使用两个单独的脚本,并将它们放置在/etc/init.d

deployer@experimental:~$ ls -l /etc/init.d/ | grep sidekiq
-rwxr-xrwx 1 root root 1988 Aug 23  2018 sidekiq_my_app_1
-rwxr-xr-x 1 root root 1993 Aug 23  2018 sidekiq_my_app_2

初始化脚本是所示示例脚本的修改版本这里

我使用如下命令启动/停止/重新启动脚本$ service sidekiq_my_app_1

在正常情况下,我希望每个应用程序只有 1 个 Sidekiq 进程,如下所示:

deployer@experimental:~$ ps aux | grep sidekiq
deployer  1645  0.1  3.5 1150452 144188 ?      Sl   Jul16   4:29 sidekiq 5.0.4 my_app_1 [0 of 10 busy]
deployer  1658  5.4  7.3 1444620 298252 ?      Sl   Jul16 139:11 sidekiq 4.2.2 my_app_2 [0 of 10 busy]
deployer 22759  0.0  0.0  14516   940 pts/2    S+   12:31   0:00 grep sidekiq
deployer@experimental:~$

但是我注意到,在自动部署过程中,应用程序的多个 Sidekiq 进程会启动,如下所示

deployer@experimental:~$ ps aux | grep sidekiq
deployer  1645  0.1  3.5 1150452 144188 ?      Sl   Jul16   4:29 sidekiq 5.0.4 my_app_1 [0 of 10 busy]
deployer  1658  5.4  7.3 1444620 298252 ?      Sl   Jul16 139:11 sidekiq 4.2.2 my_app_2 [0 of 10 busy]
deployer  1907  2.3  8.1 1703424 331276 ?      Sl   Jul16 150:02 sidekiq 4.2.2 my_app_2 [0 of 10 busy]
deployer 22759  0.0  0.0  14516   940 pts/2    S+   12:31   0:00 grep sidekiq
deployer@experimental:~$

这会导致后台作业的不可预测的行为。

任何人都可以建议一些解决方案来自动解决上述关闭额外进程并最终为每个应用程序仅保留 1 个进程的问题吗?

此外,如果可以建议一些解决方案,我可以通过电子邮件/短信收到有关上述问题的通知,这将是一个很大的帮助。

谢谢。

相关内容