Unicorn Restart - master 启动失败,查看 stderr 日志了解详情
Unicorn Restart - master failed to start, check stderr log for details
使用 capistrano 部署时出错
DEBUG [aaaad896] Command: cd /home/dev/PROJECT-NAME/current && ( export RAILS_ENV="production" ; ~/.rvm/bin/rvm default do bundle exec unicorn -c /home/dev/PROJECT-NAME/current/config/unicorn.rb -E deployment -D )
DEBUG [aaaad896] master failed to start, check stderr log for details
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as dev@XX.XXX.XXX.XX: bundle exit status: 1
bundle stdout: Nothing written
bundle stderr: master failed to start, check stderr log for details
其他日志.
Errno::EADDRINUSE: Address already in use - bind(2) for 0.0.0.0:8080
/home/dev/PROEJCT-NAME/shared/bundle/ruby/2.3.0/gems/unicorn-5.1.0/lib/unicorn/socket_helper.rb:149:in `bind'
unicorn.rb 文件 : unicorn.rb
deploy.rb 文件 deploy.rb
默认 (nginx/site-enables/default) 文件 : default
每当我在 capistrano 中遇到此错误时,每次重新启动 unicorn 时。那么我该如何解决这个问题?
问题是您有另一个服务正在侦听端口 8080,这就是您的日志所说的。如果您使用的是 linux,您可以检查它使用的是哪个服务 lsof -i:8080
。这将告诉您谁在使用该端口。如果您可以终止该服务,就这样做,如果不能,只需更改配置文件上的端口。
要终止已经 运行 的进程,您可以使用
检查它们
ps aux | grep unicorn
其中会列出类似
的内容
deployer 3807 2.8 9.3 369964 94996 ? Sl 12:51 0:03 unicorn master -D -c /home/deployer/apps/cb_app/current/config/unicorn.rb -E staging
deployer 3816 0.0 8.5 369964 87040 ? Sl 12:51 0:00 unicorn worker[0] -D -c /home/deployer/apps/cb_app/current/config/unicorn.rb -E staging
deployer 3818 0.0 8.5 369964 87200 ? Sl 12:51 0:00 unicorn worker[1] -D -c /home/deployer/apps/cb_app/current/config/unicorn.rb -E staging
然后你可以用
杀死他们
kill 3807
现在再次尝试部署并查看主服务器是否启动。
有时候只是权限的问题,当unicorn重启的时候需要写入日志。检查 /log 的文件夹权限并使其对所有人都可写。
我遇到了同样的问题,是的,它是关于权限的,早些时候当 docker GitLab 容器(或服务器)关闭时,我确实对日志和数据文件的权限进行了一些更改(是卷)在本地机器上。由于更改了权限,GitLab 容器在启动时无法写入任何内容,因此出现此错误。因为我已经恢复了我所做的更改。它对我来说很好用。
使用 capistrano 部署时出错
DEBUG [aaaad896] Command: cd /home/dev/PROJECT-NAME/current && ( export RAILS_ENV="production" ; ~/.rvm/bin/rvm default do bundle exec unicorn -c /home/dev/PROJECT-NAME/current/config/unicorn.rb -E deployment -D )
DEBUG [aaaad896] master failed to start, check stderr log for details
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as dev@XX.XXX.XXX.XX: bundle exit status: 1
bundle stdout: Nothing written
bundle stderr: master failed to start, check stderr log for details
其他日志.
Errno::EADDRINUSE: Address already in use - bind(2) for 0.0.0.0:8080
/home/dev/PROEJCT-NAME/shared/bundle/ruby/2.3.0/gems/unicorn-5.1.0/lib/unicorn/socket_helper.rb:149:in `bind'
unicorn.rb 文件 : unicorn.rb
deploy.rb 文件 deploy.rb
默认 (nginx/site-enables/default) 文件 : default
每当我在 capistrano 中遇到此错误时,每次重新启动 unicorn 时。那么我该如何解决这个问题?
问题是您有另一个服务正在侦听端口 8080,这就是您的日志所说的。如果您使用的是 linux,您可以检查它使用的是哪个服务 lsof -i:8080
。这将告诉您谁在使用该端口。如果您可以终止该服务,就这样做,如果不能,只需更改配置文件上的端口。
要终止已经 运行 的进程,您可以使用
检查它们ps aux | grep unicorn
其中会列出类似
的内容deployer 3807 2.8 9.3 369964 94996 ? Sl 12:51 0:03 unicorn master -D -c /home/deployer/apps/cb_app/current/config/unicorn.rb -E staging
deployer 3816 0.0 8.5 369964 87040 ? Sl 12:51 0:00 unicorn worker[0] -D -c /home/deployer/apps/cb_app/current/config/unicorn.rb -E staging
deployer 3818 0.0 8.5 369964 87200 ? Sl 12:51 0:00 unicorn worker[1] -D -c /home/deployer/apps/cb_app/current/config/unicorn.rb -E staging
然后你可以用
杀死他们kill 3807
现在再次尝试部署并查看主服务器是否启动。
有时候只是权限的问题,当unicorn重启的时候需要写入日志。检查 /log 的文件夹权限并使其对所有人都可写。
我遇到了同样的问题,是的,它是关于权限的,早些时候当 docker GitLab 容器(或服务器)关闭时,我确实对日志和数据文件的权限进行了一些更改(是卷)在本地机器上。由于更改了权限,GitLab 容器在启动时无法写入任何内容,因此出现此错误。因为我已经恢复了我所做的更改。它对我来说很好用。