在启动后台进程之前检查内存和服务器负载的 Bash 逻辑

在启动后台进程之前检查内存和服务器负载的 Bash 逻辑

我正在尝试实现以下伪算法:

while true
do
  if there is 1G of free memory && server load below 60%
    ./some-script &
    break
  else
    sleep 10
  fi
done

我需要帮助(建议、实施说明)来实施:

  1. 检查是否有 1G 可用内存
  2. 检查服务器负载是否低于 60%

答案1

您需要与可用 RAM 进行比较,因此我们将从 /proc/meminfo 中获取该详细信息。

通过做一些魔法来将负载表示为百分比(直接从https://stackoverflow.com/a/9229692/1287561

while true
do
  if [ `cat /proc/meminfo |grep MemFree|awk '{ print $2 }'` -lt 1048576 && `top -bn1 | grep "Cpu(s)" | \
       sed "s/.*, *\([0-9.]*\)%\id.*/\1/" | \
       awk '{print 100 - $1}'` -lt 60 ]
    ./some-script &
    break
  else
    sleep 10
  fi
done

答案2

只需使用包batch(1)的一部分at。它在负载较低时运行参数。

相关内容