Como faço para iniciar um servidor via ssh e executá-lo depois de efetuar o logout?

1

Eu ssh em um servidor virtual e inicio um servidor web. Tudo funciona como esperado. Mas quando fecho meu terminal no meu laptop, o processo morre no servidor virtual. Como faço para corrigir isso?

    
por bernie2436 08.03.2014 / 18:28

3 respostas

5

Você pode usar disown , é um bash embutido:

disown [-ar] [-h] [jobspec ...]

Without options, each jobspec is removed from the table of active jobs. If the -h option is given, each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is supplied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value is 0 unless a jobspec does not specify a valid job.

Tente isto:

$ <your command> &
$ disown

Primeiro, faça seu comando rodar em segundo plano digitando <your command> & , então use disown , ele fará com que seu comando continue rodando mesmo se sua sessão ssh estiver desconectada.

IMHO, você deve usar uma ferramenta para controlar seu serviço, como supervisord ou escrever seu próprio script de inicialização.

    
por 08.03.2014 / 18:35
1

Supondo que você esteja trabalhando com o httpd em um sistema baseado em systemd -

Quando conectado ao servidor, você deve executar estes comandos:

sudo systemctl enable httpd.service
sudo systemctl restart httpd.service

Você pode verificar se está sendo executado em logins subseqüentes executando este comando:

systemctl status httpd.service
    
por 08.03.2014 / 18:32
1

Você precisa cuidar de duas coisas:

  • Redirecionando os fluxos de entrada / saída padrão para / de qualquer lugar.

  • Bifurcando o processo em segundo plano reparado pelo init .

O bit "reparado pelo init" 1 é a parte mais crucial, pois senão o processo receberá um HUP quando você sair. O comando nohup pode bloquear o HUP, e o processo orfão agora será adotado pelo init, mas uma solução melhor é simplesmente usar setsid , que inicia imediatamente o processo em um novo processe o grupo , com o init como pai:

setsid myprog < /dev/zero 2>&1&> /dev/null

< /dev/zero redireciona stdin; isso pode ou não importar, dependendo da natureza de myprog . 2>&1&> /dev/null redireciona a saída para que você não receba nenhum lixo no seu terminal antes de efetuar o logout.

1. Init é o primeiro processo iniciado no sistema (pelo kernel) e o único que não pode morrer. O PID do init é sempre 1. Note que alguns sistemas usam um daemon de inicialização com um nome de executável diferente, você pode identificá-lo com ps -p 1 .

    
por 08.03.2014 / 19:01