新手问题 unicorn 重启时,老进程不关,同时打开了一个新的,怎么解决?

wp2123 · 2015年01月08日 · 最后由 wp2123 回复于 2015年01月08日 · 1849 次阅读

如题,想要部署后在脚本里通过 kill -USR2 unicorn_pid 命令重启 unicorn,但是 unicorn 的老进程不会被 kill 掉,同时会生成一个新的进程。

如果执行过一次,同时存在两个 unicorn 进程,kill -USR2 new_unicorn_pid 之后没有任何反应。

有没有人碰到过类似问题,求解

上图是执行 kill -USR2 pid 的结果

还需要 kill -QUIT 一个 unicorn.pid.oldbin

额,原来是我的 unicorn 配置文件写的不对。

上面的情况 kill 之后会产生一个.pid.oldbin 文件存储旧进程号,.pid 文件存的是新进程号。

解决方法: 在 unicorn.rb 文件的 befor_fork 里加入如下代码

old_pid = "/tmp/unicorn.pid.oldbin"

if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH # someone else did our job for us end end

#2 楼 @est 额,是的,写到 unicorn.rb 文件里面了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号