Iniciando o trabalho via SSH e desanexando de um comando composto

0

Gostaria de iniciar um script de longa duração via SSH e retornar imediatamente. Depois, quero verificar o host remoto a cada 5 minutos para ver se o trabalho está concluído.

Para realizar a primeira parte, usei esse truque :

ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && (/root/backup.sh </dev/null > $TMP_FILE 2>&1 &) && echo $TMP_FILE'

Agora, para a segunda parte, como o backup.sh pode ser qualquer script, eu gostaria de acrescentar algo como DONE_$TMP_FILE ao arquivo apontado por $TMP_FILE quando o backup.sh terminar e, a cada 5 minutos, execute este comando:

ssh root@remoteserver 'tail -1 $TMP_FILE'

para ver se a última linha é igual a DONE_$TMP_FILE .

O problema é que não consigo me separar de um comando composto:

ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && (/root/backup.sh </dev/null > $TMP_FILE 2>&1 && echo DONE_$TMP_FILE >> $TMP_FILE &) && echo $TMP_FILE'

O comando acima irá simplesmente bloquear até que backup.sh termine de ser executado.

Existe alguma maneira de se desconectar de uma sequência de comandos sem colocá-los em um shell script?

Se houver uma maneira melhor de fazer isso, eu adoraria ouvir isso. Idealmente, não preciso criar nenhum script de shell auxiliar.

    
por Mihai Todor 07.12.2015 / 15:47

1 resposta

0

Acontece que a solução é mais fácil do que eu pensava:

ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && ((/root/backup.sh && echo DONE_$TMP_FILE) </dev/null > $TMP_FILE 2>&1 &) && echo $TMP_FILE'
    
por 07.12.2015 / 16:16