В продолжение темы, поднятой мной ранее (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}' )
еще красивее и удобнее :)
Скрипт был написан минут за 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}' )
еще красивее и удобнее :)
Комментариев нет:
Отправить комментарий