백그라운드 작업이 계속 중지됨

백그라운드 작업이 계속 중지됨

RHEL6 bash 프롬프트에서 이상한 동작이 나타납니다. 나는 종종 다음과 같은 명령줄을 실행하는 것을 좋아합니다.

$ ./myscript > junk 2>&1

...그런 다음 클릭 Ctrl-Z하고 실행합니다...

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

하지만 오늘은 어떤 이유에서인지 내 작업이 여전히 "실행 중"이 아닌 "중지" 상태라는 것을 발견했습니다.

$ 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

제가 실행하고 있는 스크립트에는 이상한 점이 하나도 없습니다...

#!/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

답변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 -l백그라운드 작업에 대한 자세한 내용이 표시됩니다. 셸 스크립트의 경우 작업이 중지된 이유를 나타내는 다음과 같은 내용이 표시됩니다.

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

스크립트의 어떤 항목이 터미널에서 읽으려고 합니다. 백그라운드 작업이 제어 터미널에서 데이터를 읽으려고 시도하면 SIGTTIN신호를 받고 중지됩니다. (포그라운드 작업만 제어 터미널에서 읽을 수 있습니다.)

이유: 스크립트에

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

ssh는 기본적으로 표준 입력에서 읽기를 시도합니다. -nstdin에서 읽지 않도록 ssh 옵션을 제공할 수 있습니다 .

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

관련 정보