21 дек. 2012 г.

Еще больше удобства

В продолжение темы, поднятой мной ранее (http://alex-hpc.blogspot.ru/2012/12/blog-post.html) я написал более красивый скрипт для определения количества свободных и занятых ядер на узлах.
Скрипт был написан минут за 30, т.к. я не очень умею это делать, но благодаря интернету все получилось:)
Итак, раньше это и тяжело было скриптом назвать, потому что использовалась только команда alias для переобозначения длинной команды. Сейчас я написал скрипт, который использует выходные данные от команды pbsnodes -a о количестве запущенных заданий на узлах и выводит эту информацию на экран в удобной для пользователя форме.
Итак, вот сам скрипт с комментариями

#!/bin/sh
CORES=0
for i in 01 02 03 04 05 06 07 08 09 10
do
pbsnodes -a node$i > out
awk '$1=="jobs" { for (j=3; j<=34; j++) print $j }' out | uniq -u  > out.new
wc -l out.new > out.2
CORES=$(awk  '{print $1}' out.2)
if [ $CORES = "32" ] ; then
FUL="FULL"
echo -e "node$i   -   $CORES cores are busy. Node is \E[31;40m$FUL\E[0;0m"
elif [ $CORES = "0" ] ; then
FUL="EMPTY"
echo -e "node$i   -   $CORES cores are busy. Node is \E[32;40m$FUL\E[0;0m"
elif [ $CORES -lt "32" ] ; then
FUL="NOT FULL"
echo -e "node$i   -   $CORES cores are busy. Node is \E[32;40m$FUL\E[0;0m"
fi
done
rm -f out*

Перейдем к построчному описанию.
Первые пять строк очень простые и, думаю, объяснять их не стоит.
Шестая строка

awk '$1=="jobs" { for (j=3; j<=34; j++) print $j }' out | uniq -u  > out.new

просматривает выходную информацию команды pbsnodes, записанную в файл out, находит строку, начинающуюся на слово jobs ('$1=="jobs"), считывает поочередно слова этой строки и только уникальные слова, т.е. не повторяющиеся (uniq -u) в файл out.new.
Седьмая строка использует команду wc для считывания количества строк из файла out.new
В восьмой строке переменной CORES присваивается значение, полученное командой awk, которой мы берем значение количества запущенных заданий.
Всеми остальными строками идет вывод информации на экран:
Имя узла   -   количество занятых ядер и общий итог, занят узел или нет.
При запуске скрипта получаем нечто такое:


node01   -   0 cores are busy. Node is EMPTY
node02   -   32 cores are busy. Node is FULL
node03   -   32 cores are busy. Node is FULL
node04   -   30 cores are busy. Node is NOT FULL
node05   -   32 cores are busy. Node is FULL
node06   -   32 cores are busy. Node is FULL
node07   -   0 cores are busy. Node is EMPTY
node08   -   0 cores are busy. Node is EMPTY
node09   -   0 cores are busy. Node is EMPTY
node10   -   0 cores are busy. Node is EMPTY

Все очень красиво, наглядно и информативно:)

P.S.
Подумал, а почему бы не сделать так, чтобы файлы не создавались, ведь, это время. Поэтому решил все это провернуть без записи информации в файл. Очень удобен этот язык тем, что можно все записать в одну строчку подряд, например, я сделал это так:

CORES=$( pbsnodes -a node$i | awk '$1=="jobs" { for (j=3; j<=34; j++) print $j }' | uniq -u | wc -l | awk  '{print $1})

еще красивее и удобнее :)

Комментариев нет:

Отправить комментарий