簡體   English   中英

運行帶有循環的 shell 腳本時,操作會停止

[英]When running a shell script with loops, operation just stops

注意:關於如何改進問題的反饋會很好,因為我仍在學習,我知道沒有代碼,因為我相信它不需要修復。 我在網上進行了大量研究,但似乎無法找到我問題的答案。 當我更改參數以產生更少的輸出時,我的腳本可以正常工作,所以我知道它工作得很好。 我已經調試了腳本並且沒有錯誤。 當我的參數更改為產生更多輸出並且腳本運行數小時后,它就會停止。 我對以下問題的目標是確定 linux 是否會超時運行的進程(或相關的),以及,如果,如何解決。

我正在運行一個 shell 腳本,它有幾個 for 循環,它執行以下操作:

- 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 表示腳本仍在運行,但情況並非如此。

假設您在腳本中使用了“Bash”——很可能,您的 shell 會話的“系統資源”用完了。 也很可能是腳本的工作方式導致了問題。 如果沒有看到您的腳本,將很難提供額外的指導,但是,您可以在“系統級別”檢查幾個可能對您有幫助的項目,即

  • 查看系統日志以了解有關您的進程或“系統資源”的錯誤
  • 檢查您的文檔:man ulimit(或“man bash”並搜索“ulimit”)
  • 考慮刪除“深度嵌套”(如果存在); 相反,創建工作集,其中第一步構建下一步所需的“數據”,即如果可能,而不是:

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

為每個文件嘗試每個步驟 - 類似於:

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

:)
戴爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM