Изменение файлов с помощью скриптового слогана неэффективно - PullRequest
0 голосов
/ 17 января 2019

Я нахожусь на CentOS 6.9 под управлением slurm 17.11.7. Я изменил свой /gpfs0/export/slurm/conf/epilog скрипт. В конечном счете, я хотел бы распечатать информацию об использовании ресурсов задания в файл stdout, используемый для работы каждого пользователя.

Я тестировал его в условном конце сценария для себя, прежде чем развернуть его для других пользователей. Ниже мой модифицированный epilog скрипт:

#!/bin/bash
# Clear out TMPDIR on the shared file system after job completes
exec >> /var/log/epilog.log
exec 2>> /var/log/epilog.log    

if [ -z $SLURM_JOB_ID ]
then
        echo -e " This script should be executed from slurm."
        exit 1
fi

TMPDIR="/gpfs0/scratch/${SLURM_JOB_ID}"

rm -rf $TMPDIR

### My additions to the existing script ###
if [ "$USER" == "myuserid" ]
then
    STDOUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print $2}'`
    # Regular stdout/stderr is not respected, must use python.
    python -c "import sys; stdout=sys.argv[1]; f=open(stdout, 'a'); f.write('sticks\n'); f.close();"  ${STDOUT}

fi
exit 0

Из раздела Prolog и Epilog руководства пользователя slurm.conf кажется, что stdout / stderr не соблюдаются. Поэтому я изменяю файл stdout с помощью python.

Я выбрал узел 21 вычислительного узла для запуска этого задания, поэтому я вошел в узел 21 и попробовал несколько вещей, чтобы он заметил мои изменения в сценарии эпилога.

Переконфигурирование slurmd:

sudo scontrol reconfigure

Перезапустить демон slurm:

sudo service slurm stop
sudo service slurm start

Кажется, что ни один из них не вносит изменения в сценарий эпилога при отправке заданий. Когда в пакетном скрипте ставится то же условие, оно работает без ошибок:

#!/bin/bash
#SBATCH --nodelist=node21
echo "Hello you!"
echo $HOSTNAME

if [ "$USER" == "myuserid" ]
then
    STDOUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print $2}'`
    python -c "import sys; stdout=sys.argv[1]; f=open(stdout, 'a'); f.write('sticks\n'); f.close();"  ${STDOUT}
    #echo "HELLO! ${USER}"
fi

ВОПРОС: Куда я иду не так?

РЕДАКТИРОВАТЬ: Это MWE из контекста попытки печати использования ресурсов заданий в конце вывода.

1 Ответ

0 голосов
/ 29 января 2019

Чтобы получить это, добавьте конец сценария epilog.log с помощью

# writing job statistics into job output
OUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print $2}'`
echo -e "sticks" >> ${OUT} 2>&1

Не было необходимости перезапускать демонов slurm. Дополнительные команды могут быть добавлены к нему для использования ресурсов, например,

sleep 5s   ### Sleep to give chance for job to be written to slurm database for job statistics.
sacct --units M --format=jobid,user%5,state%7,CPUTime,ExitCode%4,MaxRSS,NodeList,Partition,ReqTRES%25,Submit,Start,End,Elapsed -j $SLURM_JOBID >> $OUT 2>&1

Как правило, вы можете добавить выходной файл, используя >>. Очевидно, мне не пришло в голову, что обычное перенаправление вывода все еще работает. До сих пор неясно, почему утверждение python на это не сработало.

...