После нескольких дней и многого поиска в 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.
Хм, я уже запускаю его с установленным значением pty в true. Так что sudo команда больше или нет? Я запутался, потому что я не могу найти документ всех команд. И я знаю, что мне не нужен пароль с моим sudo (кстати, метод sudo отлично работает внутри, нужно запускать внутри run). Как вы думаете, я должен объявить, что нужно работать с bash? Я также смотрю на использование Capistrano V3, но я считаю, что некоторые из API сильно изменились с тех пор, как они наследуются от Rake :: Application. – Allen
Я думаю, вы получаете какое-то интерактивное приглашение, которое останавливает ваш скрипт из сценария init.d. – Electrawn
Нет, я так не думаю. Я просмотрел журнал приложения и, когда я сказал ему перезагрузить, он отключил сервер, но он не дождался перезагрузки. Вот почему мне пришлось использовать nohup, чтобы он продолжал функционировать в фоновом режиме ПОСЛЕ завершения моего сеанса SSH. Вы знаете, что Capistrano запускает каждую команду в отдельном сеансе SSH, верно? Так что связи нет. – Allen