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

问题描述:

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

脚本仍在进程列表中,正在睡觉吗?你能重新启动脚本吗? –

假设您正在为您的脚本使用'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限制,就很可能会从几小时降至几分钟运行时间... :) –