Descobri que, se eu usar um pseudo-terminal no controle remoto, funciona! Este é o script correto:
def start_nginx():
sudo('/etc/init.d/nginx start', pty=False)
Eu quero poder iniciar e parar um servidor nginx em uma instância do Ubuntu EC2 com o Fabric.
Eu tenho estes dois scripts no meu fabfile.py:
def start_nginx():
sudo('/etc/init.d/nginx start')
#also tried this: run('sudo /etc/init.d/nginx start')
def stop_nginx():
sudo('/etc/init.d/nginx stop')
O start_nginx () aparentemente é executado sem erros (* Iniciando o Servidor Nginx ... / ... concluído), mas não inicia o servidor (ou morre imediatamente).
Se eu SSH na instância, isso inicia o nginx perfeitamente:
sudo /etc/init.d/nginx start
O script stop_nginx () Fabric pára o servidor remotamente.
Eu compilei o nginx a partir do código-fonte, usando este link e usando este script em / etc / init.d: link . A única coisa que eu modifiquei é essa linha:
DAEMON=/usr/local/sbin/nginx
para
DAEMON=/usr/sbin/nginx
porque esse é o caminho que usei quando eu ./configure-d minha compilação.
Alguém tem alguma idéia por que o script de inicialização se comporta de forma diferente a partir do Fabric?
Descobri que, se eu usar um pseudo-terminal no controle remoto, funciona! Este é o script correto:
def start_nginx():
sudo('/etc/init.d/nginx start', pty=False)