如题,想要部署后在脚本里通过 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 文件里面了