0

经过几天和大量的谷歌搜索,我终于解决了我的一个问题。我正在使用 Railsless-deploy(没有 rails 任务/好东西的 capistrano),所以我可以部署一个不在 rails 中的项目。

为了启动/停止/重新启动服务器,我已经创建了一个在 ssh 中可以正常工作的 init.d 服务,但我必须使用 nohup 才能使其工作:

namespace :deploy do
 task :start, roles: :app, except: { no_release: true } do
   sudo "nohup service app start"
 end
 desc "Stops the app"
 task :stop do
  sudo "nohup service app stop"
 end
 desc "Restarts the app"
 task :restart do
   sudo "nohup service app restart"
 end
end

我有一个快速的 2 个问题,我是否必须在命令链接后添加一个 & 符号:sudo "nohup service app restart &". 我现在没有使用它,它似乎工作正常。还有一种方法可以取回实际输出,以便我知道可以启动服务或其他任何东西?截至目前,它给出了一般警告:

 ** [out :: 0.0.0.0] nohup:
 ** [out :: 0.0.0.0] ignoring input and appending output to `nohup.out'

我想真正看到当我通过 ssh 登录时运行命令时得到的实际输出。

4

1 回答 1

0

请记住,capistrano 有两点:它不需要 tty 登录,它的默认 shell 是 sh。另一件事可能是它挂在 sudo 本身上,等待密码。sudo 作为命令已被弃用,#{sudo} 或 {#try_sudo} 可以。

我敢打赌,这些问题之一是导致您的服务无法正常启动。

而不是滥用 nohup:

run "#{sudo} service app start", { :shell => 'bash'}

或者使用 tty 运行(通常在 capfile 中设置):

default_run_options[:pty] = true

在您的命令上仅使用 pty 运行:

run "#{sudo} service app start", { :pty => true}

在命令末尾添加“&”只会告诉服务器将进程置于后台,并且您不会得到任何输出。

于 2013-10-01T22:05:46.810 回答