Как создать новый каталог для задания Slurm перед установкой рабочего каталога?

Я хочу создать уникальный каталог для каждого задания Slurm, которое я запускаю. Однако mkdir прерывает SBATCH команды. Например. когда я пытаюсь:

#!/bin/bash

#SBATCH blah blah other Slurm commands
mkdir /path/to/my_dir_$SLURM_JOB_ID
#SBATCH --chdir=/path/to/my_dir_$SLURM_JOB_ID

touch test.txt

...выполнение Slurm точно создает каталог в /path/to/my_dir_$SLURM_JOB_ID, но пропускает команду --chdir и выполняет скрипт sbatch из рабочего каталога, из которого был вызван пакет.

Есть ли способ создать уникальный каталог для вывода задания и установить там рабочий каталог в одном скрипте sbatch?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 687
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, параметры #SBATCH должны быть вверху файла и ссылаться на документацию

перед любыми исполняемыми командами

Таким образом, ожидается, что в этом случае --chdir не будет соблюдаться. Обоснование проблемы заключается в том, что параметры #SBATCH и, в частности, --chdir используются Slurm для настройки среды, в которой начинается задание. Эта среда должна быть определена до начала задания и не может быть изменена Slurm впоследствии.

По тем же причинам переменные окружения не обрабатываются в #SBATCH опциях; они просто игнорируются Bash, поскольку находятся в закомментированной строке, и Slurm не прилагает никаких усилий для их расширения.

Также обратите внимание, что --chdir используется для

Установите рабочий каталог пакетного скрипта в каталог перед его выполнением.

и этот каталог должен существовать. Slurm не создаст его для вас.

Что вам нужно сделать, так это вызвать команду cd в вашем скрипте.

#!/bin/bash

#SBATCH blah blah other Slurm commands

WORKDIR=/path/to/my_dir_$SLURM_JOB_ID
mkdir -p "$WORKDIR" && cd "$WORKDIR" || exit -1 

touch test.txt

Обратите внимание на exit -1, чтобы в случае сбоя при создании каталога ваша работа останавливалась, а не продолжалась в каталоге отправки.

В качестве примечания: всегда интересно добавить строку set -euo pipefail в свой сценарий. Это гарантирует, что ваш скрипт остановится, если какая-либо команда в нем не сработает.

вызов cd кажется таким очевидным в ретроспективе. Спасибо. pipefail также является идеальным дополнением для моего кода, поскольку получить правильное уничтожение разветвленного кода не всегда чисто. Хотел бы я снова проголосовать за это дополнение.

WesH 11.12.2020 20:07

Другие вопросы по теме