Command-Line

後台工作不斷停止

  • September 1, 2020

我在 RHEL6 bash 提示符上看到一些奇怪的行為。我經常喜歡執行看起來像…的命令行

$ ./myscript > junk 2>&1

…然後按 ^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
$ 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選擇告訴它不要從標準輸入讀取。

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

引用自:https://unix.stackexchange.com/questions/294471