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는 기본적으로 표준 입력에서 읽기를 시도합니다. -n
stdin에서 읽지 않도록 ssh 옵션을 제공할 수 있습니다 .
sudo ssh -n -q $i /tmp/access.sh