2015-08-03 42 views
-2

我有一個長的shell腳本,它運行並將結果存儲在配置單元表中。該腳本需要很長時間才能完成。所有結果都保存在臨時表中。有時腳本會被殺死或中斷,因爲它會耗費大量資源很長一段時間。截至目前,我只需從中斷點複製粘貼查詢並重新啓動它。Shell腳本:如何從中斷點找到中斷點並重新啓動代碼?

我需要編寫一個shell腳本,它可以檢查所有臨時表,並找出它在哪個點被中斷的數字,然後從該點開始。

感謝

回答

0

你可以通過編寫shell腳本運行日誌(通過文件),並跟蹤那些已經執行的查詢。

在你的shell腳本:

if [ -f "query1.complete" ] 
then 
    echo "Query 1 already run. Skipping" 
else 
    Run Query 1 
    touch query1.complete 
end if 

if [ -f "query2.complete" ] 
then 
    echo "Query 2 already run. Skipping" 
else 
    Run Query 2 
    touch query2.complete 
end if 

注:此代碼的語法可能不是完美的殼。

0

由於在每一步我創建一個表並存儲結果,所以在我檢查表是否存在的每個查詢之前。我按照以下方式實施:

tname=$(hive -e "use db_name ; show table LIKE 'tablename' " -hiveconf mapred.job.queue.name=queuename) 
if [ -z "$tname" ] 
then 
# write the next step 
else 
echo " table $tname already present hence skipping to next step "