Ruby Unicorn在USR2和退出信号后停机几秒钟(不应)
我有一个与独角兽非常基本的应用程序。Rails 5.1应用程序只需回显/打印“Hello World”。对于测试,我给了4名工人 unicorn.rb:Ruby Unicorn在USR2和退出信号后停机几秒钟(不应),ruby,capistrano,unicorn,Ruby,Capistrano,Unicorn,我有一个与独角兽非常基本的应用程序。Rails 5.1应用程序只需回显/打印“Hello World”。对于测试,我给了4名工人 unicorn.rb: worker_processes 4 preload_app true timeout 30 listen '127.0.0.1:3000', :tcp_nopush => true, :backlog => 4096 # Logging ... 现在,我向主进程发送USR2信号。主进程成功接收到我的信号并创建了另一个主进程,然
worker_processes 4
preload_app true
timeout 30
listen '127.0.0.1:3000', :tcp_nopush => true, :backlog => 4096
# Logging
...
现在,我向主进程发送USR2
信号。主进程成功接收到我的信号并创建了另一个主进程,然后将其标记为“旧”,并将PID写入oldbin
文件
问题从这里开始。当我确保创建了第二个母版及其子版时,我会将QUIT
发送到old母版。问题就在这里。当旧主机接收到退出时,整个新主机和旧主机及子机将被删除并重新创建。这使我的系统停机几秒钟
基本上,新主人杀死自己,然后重新创造。为什么?我做错了什么?我以为这是零停机时间。我可以向你保证我有3-5秒的停机时间
我检查过了,旧主控器创建了PID为5的新主控器(例如),其子控器为6、7、8、9。当我从旧的那个退出时,新的主人变成了10个,工人变成了11,12,13,14个。简单地显示旧的和新的都退出并重新创建
我不使用-D
命令。我使用foreman生成systemd
文件,如下所示:
[Unit]
PartOf=bp-web.target
[Service]
User=Pratha
WorkingDirectory=/var/www/app/releases/20170628140005
Environment=PORT=%i
ExecStart=/bin/bash -lc 'exec bundle exec unicorn -E production -c config/unicorn.rb'
Restart=always
StandardInput=null
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=%n
KillMode=mixed
TimeoutStopSec=5
这是一种预期行为: Supervisord要求unicorn进程不进行后台监控。同时向独角兽发送SIGUSR2会导致老主人死亡。由于监控器监视旧的主机<强>这将使它考虑应用程序退出< /强>,即使它正在运行一个新的进程ID。<强>最后监督者将尝试重新启动应用程序,并且不这样做,因为所有的套接字都被新的独角兽主机使用。<强/ > /p> 解决方案: