后台作业不断停止

后台作业不断停止

我在 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将显示有关后台作业的更多详细信息。对于您的 shell 脚本,它将显示类似以下内容,其中揭示了作业停止的原因:

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

您的脚本中的某些内容正在尝试从终端读取。当后台作业尝试从其控制终端读取数据时,它会收到SIGTTIN信号并停止。 (只有前台作业可以从控制终端读取。)

原因:在你的脚本中,你有

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

ssh 默认情况下会尝试从其标准输入读取。您可以为 ssh 提供-n选项,告诉它不要从 stdin 读取。

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

相关内容