trabalho em segundo plano continua parando

3

Estou vendo algum comportamento estranho no prompt do RHEL6. Eu frequentemente gosto de executar linhas de comando que parecem ...

$ ./myscript > junk 2>&1

... então pressione ^ Z e depois execute ...

$ bg
$ tail -f junk
blah blah blah blah
blah blah blah blah

Mas hoje, por algum motivo, vejo que meu trabalho fica "parado" e não está "em execução".

$ uname -a
Linux myhost 2.6.18-371.11.1.el5 #1 SMP Mon Jun 30 04:51:39 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
$ ./myscript.sh > output-07-JUL-16.txt 2>&1
^Z
[1]+  Stopped                 ./myscript.sh > output-07-JUL-16.txt 2>&1
$ bg
[1]+ ./myscript.sh > output-07-JUL-16.txt 2>&1 &
$ jobs
[1]+  Stopped                 ./myscript.sh > output-07-JUL-16.txt 2>&1
$ jobs
[1]+  Stopped                 ./myscript.sh > output-07-JUL-16.txt 2>&1

O script que estou executando não é nada exótico ...

#!/bin/sh

count='wc -l hostlist'
total=1
for i in 'grep -v "^#" hostlist'
do
    echo "Doing $total or $count $i"
    sudo scp -q access.sh $i:/tmp
    sudo ssh -q $i /tmp/access.sh
    sleep 1
    total='expr $total + 1'
done
    
por Red Cricket 07.07.2016 / 19:21

1 resposta

5
$ bg
[1]+ ./myscript.sh > output-07-JUL-16.txt 2>&1 &
$ jobs
[1]+  Stopped                 ./myscript.sh > output-07-JUL-16.txt 2>&1

Se você executar jobs -l , poderá ver algo como o seguinte, o que deixa claro porque o trabalho parou:

[1]+  4274 Stopped (tty input)     ./myscript.sh > output-07-JUL-16.txt 2>&1

Algo em seu script está tentando ler no terminal. Quando um trabalho em segundo plano tenta ler de seu terminal de controle, ele recebe um sinal SIGTTIN e pára. (Somente o trabalho em primeiro plano pode ler a partir do terminal de controle.)

A causa: no seu script, você tem

sudo ssh -q $i /tmp/access.sh

ssh por padrão tentará ler a partir de seu stdin. Você pode dar ao ssh a opção -n para dizer para não ler o stdin.

sudo ssh -n -q $i /tmp/access.sh
    
por 07.07.2016 / 21:16