不使用时将空闲工作站添加到群集

时间:2017-08-14 12:26:40

标签: linux bash unix cpu-usage

我们公司有多台计算机,有时用作工作站,有时用作服务器(运行用户定义的工作)

我想利用工作站的所有可用计算能力成为网格的一部分(将它们添加到专用服务器)

每个网格客户端可以在两种模式中的一种工作:(30%)和(100%) - (分配的cpu和ram的最大百分比)到网格客户端)

用户不应受此影响,用户开始使用计算机(本地或远程)时客户端切换到模式(30%) 在用户空闲了一段时间后,例如5分钟,并且CPU使用率很低(没有正在运行的任务),客户端应切换到模式

以下是我在stackoverflow中找到的几个例子所做的解决方案:

进入空闲状态并将模式设置为模式我等待cmd和屏幕中的空闲时间,并且需要有限的CPU使用率, 要退出模式,通过cmd或屏幕执行任何操作都会将其设置为模式

#!/bin/bash

idle=false
idleAfter=300     # consider idle after 300 seconds
idleCpuAfter=100  # max cpu usage to enter high mode
idleCpuCount=10   #seconds to keep idle state(without interruptions) before starting high mode
count=0  #count for idle state, when counter reach idleCpuCount client will initiate high mode

    while true; do

    idleInSecondsCmd=$( who -s | perl -lane 'print "$F[0]\t" . 86400 * -A "/dev/$F[1]"'| sort -k2 -n | head -1 | cut -f2 )
    idleInSecondsScreen=$(./getIdle)
    cpuLoad=$(top -b -n 1 -u "$user" | awk  'NR>7 { sum += $9; } END { print user, sum; }')

    echo "idleInSecondsCmd " + $idleInSecondsCmd  # just for debug purposes.
    echo "idleInSecondsScreen" + $idleInSecondsScreen  # just for debug purposes.
    echo "cpuLoad" + $cpuLoad  # just for debug purposes.

    if [[ ($idleInSecondsCmd -gt $idleAfter)   
        && ($idleInSecondsScreen -gt $idleAfter)
        && ($(bc <<< "$cpuLoad <= $idleCpuAfter") -eq 1 )          
        &&   $idle = false  ]] ;then

        count=$((count + 1))
        echo $count    
    else
        count=0
    fi

    if [[  $idle = false   && ($count -gt $idleCpuCount)  ]];   then
        idle=true
        setupLoad.sh 100
    fi

    if [[ ( $idleInSecondsCmd -lt $idleAfter 
        || $idleInSecondsScreen -lt $idleAfter)
        && $idle = true ]] ; then
            idle=false
        setupLoad.sh 30
    fi

    sleep 1      # polling interval
done

这是最好的方法吗?

0 个答案:

没有答案