2015-10-20 97 views
-3

注意:關於如何改進問題的反饋非常好,因爲我仍在學習,我知道沒有代碼,因爲我確信它不需要修復。我在網上進行了大量的研究,似乎無法找到我的問題的答案。當我改變參數以產生較少的輸出時,我的腳本就像它應該那樣工作,所以我知道它工作得很好。我已經調試了腳本並沒有發生錯誤。當我的參數被改變以產生更多輸出並且腳本運行數小時然後停止。我的下面這個問題的目標是確定linux是否會超時運行一個進程(或相關的),以及如何解決這個問題。運行帶有循環的shell腳本時,操作僅停止

我正在運行有幾個對環,其執行以下shell腳本:

- Goes through existing files and copies data into a newly saved/named file 
- Makes changes to the data in each file 
- Submits these files (which number in the thousands) to another system 

劇本是非常基本的(初學者在這裏),但只要我不給它太多的產生,它的工作原理應該如此。但是,如果我希望它遍歷所有可能的情況,這意味着我將生成數以萬計的文件,那麼在一段時間後,shell腳本就會停止運行。

我有足夠的硬盤存儲空間來支持所有正在創建的文件。但需要注意的一點是,在提交文件的部分中,如果他們提交的機器在那個時候已經滿了,我運行的shell腳本將不得不暫停,並等待其他機器機器清除。這個過程工作了一定的時間,但最終shell腳本停止運行,不會繼續。

有沒有辦法讓它繼續或阻止它停止?我輸入control + Z來暫停腳本,然後fg恢復,但它仍然沒有任何作用。我通過輸入ls -la來檢查文件的大小是否在增加,雖然top/ps表示腳本仍在運行,但狀態不是。

+8

從我能看到的(這是什麼),你沒有錯誤。 – chepner

+0

你有錯誤嗎?將'set -x'添加到腳本的頂部,查看它發生錯誤的位置(這將會有很多額外的輸出)。 –

+0

腳本仍在進程列表中,正在睡覺嗎?你能重新啓動腳本嗎? –

回答

0

假設您正在爲您的腳本使用'Bash' - 很可能,您的shell會話將耗盡'系統資源'。也很有可能,你的腳本的工作方式導致了這個問題。沒有看到你的腳本就難以提供更多的指導,但是,你可以在「系統級」可幫助您檢查幾個項目,即

  • 審查制度日誌中關於您的進程或約「系統錯誤資源'
  • 檢查您的文檔:man ulimit(或'man bash'並搜索'ulimit')
  • 考慮刪除'deep nesting'(如果存在);相反,創建工作集合,其中第一步建立所需下一步,即如果有可能的「數據」,而不是:

    步驟1中(所有文件)##猜測這是你在做什麼
    第2步(所有文件)
    步驟3中(所有文件

嘗試爲每個文件的每一步 - 是這樣的:

for MY_FILE in ${FILE_LIST} 
do 
    step_1 
    step_2 
    step_3 
done 

:)
戴爾

+0

謝謝戴爾,我明白很難不看我的實際劇本,但你提供了我正在尋找的答案類型,這很有幫助。非常感謝 –

+0

注意,如果「性能」或「時間」很重要,那麼在對上述內容進行細化之後,考慮使用「並行方法」 - 只要不是CPU或IO限制,就很可能會從幾小時降至幾分鐘運行時間... :) –