service morto em ssh hangup [duplicate]

1

Se eu usar ssh para executar algum comando em segundo plano, esse comando será morto assim que um ssh desligar:

ssh localhost -t "bash -c '(for i in 1 2 3 4 5; do sleep \$i;done)&'"; ps x|grep sleep

Isso não mostrará nenhum processo de suspensão em andamento. (Mas seria, se eu fizer o ps dentro do comando ssh).

No entanto, se eu fizer login manualmente, executá-lo em segundo plano e efetuar logout, o comando continuará em execução.

ssh localhost
bash -c '(for i in 1 2 3 4 5; do sleep $i;done)&';exit
ps x|grep sleep

Por que o primeiro comando é morto? Por que não o segundo?

(NB: Esse problema surgiu quando tentei iniciar um serviço com service tomcat start , o que funcionou bem após um login manual, mas nenhum serviço estava em execução após chamar diretamente no comando ssh).

Não, isso não é uma duplicata de ssh + nohup não funciona . Eu não estou falando de nohup e não estou tentando usar jobs em vez de ps .

    
por michas 11.02.2014 / 17:21

1 resposta

0

São suas aspas duplas no comando

ssh localhost -t "bash -c '(for i in 1 2 3 4 5; do sleep $i;done)&'"

O shell do qual você está chamando o comando tenta substituir $i antes que toda a linha de comando seja executada. Normalmente $i não está definido, portanto, é interpretado como

ssh localhost -t "bash -c '(for i in 1 2 3 4 5; do sleep ;done)&'"

que é executado com 5 mensagens de erro dizendo

sleep: missing operand
Try 'sleep --help' for more information.

A solução é mascarar o $ ou usar aspas simples externas:

ssh localhost -t "bash -c '(for i in 1 2 3 4 5; do sleep \$i;done)&'"
ssh localhost -t 'bash -c '\''(for i in 1 2 3 4 5; do sleep $i;done)&'\'
    
por 11.02.2014 / 18:33