独角兽在收到USR2信号后无法生成工作进程

6
我正在向主进程发送USR2信号,以使用独角兽实现零停机部署。在旧的主进程结束后,我遇到了以下错误:
adding listener failed addr=/path/to/unix_socket (in use)

unicorn-4.3.1/lib/unicorn/socket_helper.rb:140:in `initialize':
Address already in use - /path/to/unix_socket (Errno::EADDRINUSE)

在unicorn.rb配置文件的before_fork块中,老的主进程被杀死了。该进程是通过upstart启动的,没有使用守护进程(-D)选项。 对于发生的情况有什么想法吗?


你能分享一下 unicorn.rb 文件中的 before_fork 代码块吗? - psugar
1个回答

2

原来,如果你想进行零停机部署,就必须以守护进程模式(-D)运行。我在我的upstart脚本中做了一些修改,现在它可以正常工作:

setuid username
pre-start exec unicorn_rails -E production -c /path/to/app/config/unicorn.rb -D
post-stop exec kill cat `/path/to/app/tmp/pids/unicorn.pid`
respawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接