运行带有循环的shell脚本时,操作会停止

时间:2015-10-20 13:43:23

标签: linux bash shell for-loop timeout

注意:关于如何改进问题的反馈会很好,因为我还在学习,我知道没有代码,因为我相信它不需要修复。我在网上研究了很多,似乎无法找到我的问题的答案。当我更改参数以产生较少的输出时,我的脚本可以正常工作,所以我知道它的工作正常。我调试了脚本并没有错误。当我的参数被更改为产生更多输出并且脚本运行数小时然后停止。我对下面这个问题的目标是确定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表示脚本仍然在运行,但是它不是。

1 个答案:

答案 0 :(得分:0)

假设您正在为脚本使用“Bash” - 很可能,您的shell会话的“系统资源”已用尽。最有可能的是,脚本的工作方式也会导致问题。如果没有看到您的脚本,将很难提供额外的指导,但是,您可以在“系统级别”检查可能对您有所帮助的几个项目,即

  • 查看系统日志,了解有关您的流程或“系统资源”的错误
  • 检查你的文档:man ulimit(或'man bash'并搜索'ulimit')
  • 考虑删除“深度嵌套”(如果存在);相反,创建工作集,其中第一步构建下一步所需的“数据”,即如果可能,而不是:

    第1步(所有文件)##猜测这就是你在做什么 第2步(所有文件)
    第3步(所有文件

为每个文件尝试每个步骤 - 例如:

{{1}}

:)
戴尔