Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何延迟运行程序直到磁盘活动停止_Linux_Bash_Scripting - Fatal编程技术网

Linux 如何延迟运行程序直到磁盘活动停止

Linux 如何延迟运行程序直到磁盘活动停止,linux,bash,scripting,Linux,Bash,Scripting,我想在我的启动脚本中加入一些大型应用程序。由于启动每一个都是I/O繁重的任务,为了避免拥塞,我想推迟启动另一个,直到第一个初始化 这些不是生成一些作业然后存在的工作脚本。我说的是GUI应用程序(如Firefox、Eclipse),它们不会退出,因此知道应用程序已完成初始化工作的唯一方法是(如果我错了,请纠正我)检查磁盘I/O 我知道我可以通过解析顶部的输出来粘合一些东西,或者更好地使用vmstat——但有些事情告诉我,必须有一个更简单的解决方案,比如“等待io空闲”实用程序,它在给定时间(例如3

我想在我的启动脚本中加入一些大型应用程序。由于启动每一个都是I/O繁重的任务,为了避免拥塞,我想推迟启动另一个,直到第一个初始化

这些不是生成一些作业然后存在的工作脚本。我说的是GUI应用程序(如Firefox、Eclipse),它们不会退出,因此知道应用程序已完成初始化工作的唯一方法是(如果我错了,请纠正我)检查磁盘I/O

我知道我可以通过解析
顶部的输出来粘合一些东西,或者更好地使用
vmstat
——但有些事情告诉我,必须有一个更简单的解决方案,比如“
等待io空闲
”实用程序,它在给定时间(例如3秒)内采样的磁盘io小于给定阈值(例如10%)时返回


有人知道这种实用程序吗?

这不是您正在寻找的理想工具,但仍然是一种解决方案:

while [[ $(iostat -d -x 3 2 sda | 
          sed -n 's/.*[^0-9]\([0-9][0-9]*\),[^,]*$/\1/p' | tail -1) > 10 
      ]]; do 
  echo wait
done

对sda的利用率进行采样3秒,如果低于10%,则退出。

这不是您正在寻找的理想方案,但仍然是一个解决方案:

while [[ $(iostat -d -x 3 2 sda | 
          sed -n 's/.*[^0-9]\([0-9][0-9]*\),[^,]*$/\1/p' | tail -1) > 10 
      ]]; do 
  echo wait
done

对sda的利用率进行3秒钟的采样,如果低于10%,则退出。

根据pereal的回答,我已经修补了一个脚本,可以使用了。我们称之为等待磁盘空闲
。这种方法的缺点是它需要自己的初始化时间。在对“采样时间”进行有效采样的同时,需要两倍的“采样时间”才能执行。这就是iostat的局限性

(是的,必须是bash,而不是sh)


根据佩雷尔的回答,我已经修改了一个脚本,可以使用了。我们称之为等待磁盘空闲。这种方法的缺点是它需要自己的初始化时间。在对“采样时间”进行有效采样的同时,需要两倍的“采样时间”才能执行。这就是iostat的局限性

(是的,必须是bash,而不是sh)


谢谢不幸的是,它不起作用。我的版本和你的
iostat
版本之间一定不兼容。我正在调试它。顺便说一句,我使用Ubuntu12.10。首先,在我的系统中有一个区域设置,它使用逗号作为小数点。但还有更多,因为它仍然不起作用。(这是解析命令行实用程序的输出的问题——它永远不可移植)我正在使用fedora。当我使用
iostat
时,它是最后一列,所以我认为它可能比较容易获得。你的iostat输出是什么?谢谢,更新了sed表达式,其中也有一个错误。不幸的是,它不起作用。我的版本和你的
iostat
版本之间一定不兼容。我正在调试它。顺便说一句,我使用Ubuntu12.10。首先,在我的系统中有一个区域设置,它使用逗号作为小数点。但还有更多,因为它仍然不起作用。(这是解析命令行实用程序的输出的问题——它永远不可移植)我正在使用fedora。当我使用
iostat
时,它是最后一列,所以我认为它可能比较容易获得。你的iostat输出是什么?谢谢,更新了sed表达式,其中也有一个错误