Command-Line
後台工作不斷停止
我在 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