2016-06-12 76 views
1

所以我推出下面典型的nohup語法腳本:腳本打破當終端關閉,即使推出背景

nohup ./script & 

下面的日誌輸出的一部分是,當我有一個臨時的Internet連接顯示什麼和我的終端窗口鎖定,迫使我手動關閉它們。當我的問題解決了我重新登錄並查看日誌的輸出:

日誌輸出:(從results2.log)

-------------- 
UPDATE table where id between 45759776 and 55759776 
-------------- 

Terminal close -- sending "KILL QUERY 3329619" to server ... 
Terminal close -- query aborted. 
Bye 
-------------- 

腳本Conents:

#!/bin/bash 

first=5759776 
last=15759776 

while [ $first -lt 73843165 ]; do 
    mysql -u -p??????? db -vvv -e "UPDATE table where pc.id between $first and $last;" >> results2.log 
    ((first=first+10000000)) 
    ((last=last+10000000)) 
done 

所以基本上有兩個問題:

  1. 當我關閉終端時,爲什麼不在後臺運行?
  2. 如何避免將來發生這種情況?
+0

你想要做什麼更新?在 –

+0

中沒有**設置字段= xx **問題不在於查詢語法。我只是簡化了日誌文本。 – user3299633

回答

0

添加陷阱處理您的腳本來捕獲的信號,如:

#!/bin/bash 

trap "echo 'trap recieved';" SIGHUP SIGINT SIGTERM 

first=5759776 
last=15759776 
.... 

進程可以接收信號,告知他們在一些事件。你可以用命令發送信號,命令爲。其他進程也像父進程一樣向進程發送信號。用這個命令你可以捕捉到信號。如果你不抓住他們,這個過程將終止。唯一的信號是9,你不能捕捉像:kill -9 processid;

+0

你能分享一下這會做什麼嗎? – user3299633

+0

@ user3299633 - 我已將它添加到我的答案中 –