Por que o “ssh localhost nohup echo hello” não está funcionando?

0

Acho que isso resume:

# /usr/bin/nohup echo hello
/usr/bin/nohup: ignoring input and appending output to 'nohup.out'

# ssh localhost /usr/bin/nohup echo hello
hello

O que aconteceu?

    
por samwyse 20.10.2016 / 16:10

2 respostas

3

De man nohup (POSIX) :

   If  the  standard output is a terminal, all output written by the named
   utility to its standard output shall be appended to the end of the file
   nohup.out  in  the current directory. ...

   If the standard error is a terminal, all output written  by  the  named
   utility  to  its  standard  error  shall be redirected to the same file
   descriptor as the standard output.

Para enfatizar: Se a saída padrão é um terminal .

Com um ssh nohup echo foo simples, a saída padrão não é um TTY, a menos que você diga ao SSH para criar um:

ssh -t localhost nohup echo foo

Em man ssh :

-T   Disable pseudo-tty allocation.
-t   Force pseudo-tty allocation.  This can be used to execute
     arbitrary screen-based programs on a remote machine, which can be
     very useful, e.g. when implementing menu services.  Multiple -t
     options force tty allocation, even if ssh has no local tty.

Veja também:

por 20.10.2016 / 16:22
4

Aparentemente ,

recent versions of ssh started using pipes for non-TTY STDIO

então

there is no way for a bash script to tell whether a non-tty ssh command is being piped or not.

Como nohup entra em ação somente quando detecta que stdout / stderr estão conectados a um terminal (e não faz nada quando a saída vai para um canal) e a maneira como ssh o lança parece que está sendo canalizado, você tem o comportamento que está vendo.

Como muru aponta , você pode forçar ssh a alocar tty usando o parâmetro -t :

$ ssh -t localhost "/usr/bin/nohup /bin/echo foo"
/usr/bin/nohup: ignoring input and appending output to ‘nohup.out’
    
por 20.10.2016 / 16:23

Tags