2013-09-27 3 views
0

После нескольких дней и многого поиска в Google, я наконец решил проблему. Я использую Railsless-deploy (capistrano без задач rails/goodies), поэтому я могу развернуть проект, который не находится в рельсах.Capistrano и Ubuntu Service

Для того, чтобы начать/остановить/перезапустить сервер, я уже сделал услугу init.d, которая прекрасно работает в SSH, но я должен был использовать поЬир, чтобы заставить его работать:

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 вопроса, мне нужно добавить амперсанд (&) после команды link this: 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.

ответ

0

Имейте в виду, что есть две вещи о capistrano: для входа в систему не требуется tty, и оболочка по умолчанию - sh. Другое дело, возможно, оно висит на самом судо, ожидая пароля. sudo как команда устарела, # {sudo} или {#try_sudo} в порядке.

Моя ставка заключается в том, что одна из этих проблем заставляет ваш сервис не запускаться должным образом.

Вместо того, злоупотребление поЬир:

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

Или работать с TTY (обычно установлен в capfile):

default_run_options[:pty] = true 

Run с только PTY на вашей команде:

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

Добавление «&» в конец команды будет просто указывать серверу на фоновый процесс, и вы не получите никакого вывода.

+0

Хм, я уже запускаю его с установленным значением pty в true. Так что sudo команда больше или нет? Я запутался, потому что я не могу найти документ всех команд. И я знаю, что мне не нужен пароль с моим sudo (кстати, метод sudo отлично работает внутри, нужно запускать внутри run). Как вы думаете, я должен объявить, что нужно работать с bash? Я также смотрю на использование Capistrano V3, но я считаю, что некоторые из API сильно изменились с тех пор, как они наследуются от Rake :: Application. – Allen

+0

Я думаю, вы получаете какое-то интерактивное приглашение, которое останавливает ваш скрипт из сценария init.d. – Electrawn

+0

Нет, я так не думаю. Я просмотрел журнал приложения и, когда я сказал ему перезагрузить, он отключил сервер, но он не дождался перезагрузки. Вот почему мне пришлось использовать nohup, чтобы он продолжал функционировать в фоновом режиме ПОСЛЕ завершения моего сеанса SSH. Вы знаете, что Capistrano запускает каждую команду в отдельном сеансе SSH, верно? Так что связи нет. – Allen

Смежные вопросы