Eu quero executar um script, start.sh
em um servidor remoto que execute isso:
nohup node server.js &
Ingenuamente, chamo SSH assim:
ssh myserver <<EOF
./start.sh &
EOF
Isso inicia o script, mas deixa a sessão conectada. Quero seguir esta etapa com outros comandos em um script, para que não seja bom.
Como posso fazer o SSH na máquina remota, iniciar um nohup
comando em segundo plano e desconectar? Suponho que poderia colocar o processo SSH em segundo plano, mas isso não parece certo.
fonte
> /dev/null
.> /dev/null 2>&1
é descartar qualquer saída stdout / stderr, redirecionando para o buraco negro lolnohup command2 >> /path/to/command2.log 2>&1 &
em um terminal e depois fechar o terminal, o processo seja perdido?Por que não apenas tmux ou screen e acabar com isso? Por exemplo:
Isso é prático se for algo que fará um loop contínuo ou levará um tempo para terminar. Você pode se desconectar da sessão e ela permanecerá ativa.
fonte
não está sendo executado no modo daemon, mantendo sua sessão ssh conectada. A sessão ssh retornará em 10 segundos, apesar de você ter usado nohup.
O motivo é que stdout remoto e stderr ainda estão conectados à sua sessão. Mantém a sessão ssh ativa, nohup não ajuda.
Este:
retorna imediatamente. Ele inicia o processo remoto com nohup e sai da sessão ssh imediatamente.
fonte
Forma mais curta:
Parece que o próprio bash realiza a desanexação do terminal, portanto, não é necessário nohup. Eu executo o Ubuntu 14.04 x86_64, bash 4.3.11.
fonte
nohup;
apenas gera uma reclamação sobre argumentos ausentes.command 1; command 2; ...
representa o script OP deseja executar. OP também pode usar caso especial de esta resposta:ssh myserver ./start.sh &>/dev/null &