1

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

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

我知道我可以通过解析输出来粘合一些东西,atop甚至更好地使用vmstat- 但有件事告诉我,必须有一个更简单的解决方案,比如wait-for-io-idle当磁盘 IO 在给定时间(例如 3 秒)采样时返回的实用程序更少超过给定的阈值(例如 10%)。

有谁知道这样的实用程序?

4

2 回答 2

1

根据 pereal 的回答,我已经修补了一个可以使用的脚本。让我们称之为wait-for-disk-idle。这种方法的缺点是它自己需要初始化时间。在有效采样“采样时间”的同时执行两次“采样时间”。这是 iostat 的局限性。

(是的,一定是bash,不是sh)

#! /bin/bash

USAGE="Usage: `basename $0` [-t sample time] [-p disk IO percent threshold] disk-device"

time=3
percent=10
# Parse command line options.
while getopts ":t:" OPT; do
    case "$OPT" in
        t)
            time=$OPTARG
            ;;
        :)
            # getopts issues an error message
            echo "`basename $0` version 0.1"
            echo $USAGE >&2
            exit 1
            ;;
        \?)
            # getopts issues an error message
            echo "`basename $0` version 0.1"
            echo $USAGE >&2
            exit 1
            ;;
    esac
done
while getopts ":p:" OPT; do
    case "$OPT" in
        p)
            percent=$OPTARG
            ;;
        :)
            ;;
        \?)
            # getopts issues an error message
            echo "`basename $0` version 0.1"
            echo $USAGE >&2
            exit 1
            ;;
    esac
done

# Remove the switches we parsed above.
shift `expr $OPTIND - 1`

# We want at least one non-option argument. 
# Remove this block if you don't need it.
if [ $# -eq 0 ]; then
    # getopts issues an error message
    echo "`basename $0` version 0.1"
    echo $USAGE >&2
    exit 1
fi

# echo percent: $percent, time: $time, disk: $1

while [[ $(iostat -d -x $time 2 $1 | 
          sed -n 's/.*[^0-9]\([0-9][0-9]*\),[^,]*$/\1/p' | tail -1) > $percent 
      ]]; do 
#   echo wait
done
于 2013-03-26T09:40:16.940 回答
0

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

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% 则退出。

于 2013-03-26T07:46:47.467 回答