Ядерно-физические приборы (7 сем) / Сборник_лабораторных_работ
.pdfЛАБОРАТОРНАЯ РАБОТА №8 ЗНАКОМСТВО С ОС LINUX И КОМАНДНОЙ
ОБОЛОЧКОЙ BASH, ИСПОЛЬЗУЕМЫХ ПРИ ОБРАБОТКЕ И АНАЛИЗЕ ДАННЫХ КОСМОФИЗИЧЕСКИХ И НАЗЕМНЫХ ЭКСПЕРИМЕНТОВ
Цель работы: приобрести опыт работы в оболочке Bash и удаленной работы с сервером. Осуществить многопоточную обработку данных на кластере, используя в качестве примера измерения, выполненные в эксперименте PAMELA.
ВВЕДЕНИЕ
Современные экспериментальные установки в процессе измерений генерируют большое количество данных. Для их хранения и обработки создаются специальные дата-центры, работа с которыми осуществляется в режиме удаленного доступа. Так, например, в спутниковом эксперименте PAMELA за 10 лет накоплено более 50 Тбайт данных.
В НИЯУ МИФИ есть Центр обработки данных (ЦОД), в котором располагаются несколько вычислительных ферм [1, 2]. Одна из них
— Lxfarm — используется Институтом космофизики кафедры № 7 для хранения измерений спектрометра PAMELA. В лабораторной работе студентам предлагается познакомиться с удаленной работой на сервере, обработать экспериментальные данные PAMELA с использованием распределенных вычислений и получить конкретный физический результат: зависимость ионизационных потерь в веществе детектора от жесткости частицы для нескольких дней работы спектрометра.
На компьютерах Lxfarm установлен Scientific Linux — дистрибутив операционной системы Linux, созданный совместными усилиями Fermilab и CERN. Поэтому для работы на серверах пользователю необходимы навыки работы в командной строке Linux. Основные сведения о работе в командной строке, необходимые для лабораторной работы, даны в пп. 8.1. Подраздел 8.2. посвящен описанию менеджера Torque, используемого в Lxfarm для организации распределенных вычислений.
121
8.1. Основы работы в Bash
Взаимодействие пользователя с операционной системой осуществляется через специальную программу — оболочку (Shell). В общем случае различают оболочки с двумя типами интерфейса: текстовый пользовательский интерфейс (TUI) и графический пользовательский интерфейс (GUI).
Одна из разновидностей TUI — интерфейс командной строки (CLI – command-line interface), известный также как «терминал», «консоль», «черное окошко». Работа в командной строке представляет собой последовательный ввод пользователем некоторой команды, вывод на экран результата ее выполнения и ввод следующей команды. Программа, обрабатывающая эти команды, называется «командный интерпретатор» или «командный процессор». Часто командный интерпретатор также называют оболочкой (shell).
В Unix-подобных операционных системах используются командные интерпретаторы, которые называют собирательным названием Unix shell [3]. Большинство из них произошли от Bourne shell — оболочки, написанной Стивеном Борном для UNIX Version 7 в 1979 г. Она оказала влияние на последующие командные интерпретаторы, став де-факто стандартом, задающим основные команды и возможности.
Bash — усовершенствованная и модернизированная вариация Bourne shell [4, 5]. Ее название происходит от англ. Bourne again shell (еще одна оболочка Борна). В настоящее время является стандартной оболочкой в большинстве дистрибутивов Linux.
8.1.1. Основные команды
Интерпретатор Bash имеет множество внутренних и внешних команд. Внутренние команды встроены непосредственно в оболочку и при выполнении не порождают новый процесс. Внешние являются частью операционной системы и представлены бинарными исполняемыми файлами в «/bin», их набор зависит от дистрибутива.
122
После имени команды могут указываться дополнительные опции — ключи, а также один или несколько параметров (аргументов). Например, команда
-$ ls -l /bin
выведет на экран (ls) в виде списка (ключ -l) содержимое директории «/bin».В табл. 8.1. приведены некоторые команды Bash и дано краткое описание их назначения.
|
Таблица 8.1 |
Команда |
Описание |
pwd |
Выводит название текущей директории |
cd |
Изменяет текущую директорию |
|
Выводит выражение или содержимое перемен- |
echo |
ной |
ls |
Выводит содержимое директории |
cat |
Выводит содержимое файла |
cp |
Копирует файлы |
mv |
Перемещает файлы |
rm |
Удаляет файлы |
mkdir |
Создает новую директорию |
rmdir |
Удаляет директорию |
chmod |
Изменяет атрибуты файла |
history |
Выводит 1000 последних введенных команд |
man |
Выводит справочную информацию о командах |
123
С синтаксисом и более подробным описанием этих и других команд Bash, включая описание ключей и опций, можно ознакомиться с помощью встроенного справочника (команда «man»). Также ясное и подробное объяснение работы различных команд с примерами их использования можно найти на сайте [6] в разделе «Команды» (также на сайте есть поиск по командам).
8.1.2.Права доступа
Воперационной системе Linux существует система прав доступа
кфайлам, поскольку изначально она проектировалась как многопользовательская система. Каждый файл или директория обладает тремя параметрами доступа:
1.Чтение (r — read). Разрешает просматривать содержимое файла. Для директории означает возможность получить список файлов и директорий, расположенных в ней.
2.Запись (w — write). Разрешает записывать новые данные в файл или изменять существующие. Позволяет создавать
иизменять файлы и директории.
3.Исполнение (x — execituion). Помечает файл как «исполняемый», что позволяет системе воспринимать файл как программу. Для директории означает возможность перейти в нее.
Выделяют три категории пользователей, для которых устанавливаются права доступа:
1.Владелец (u — user). Пользователь, который создал файл или установлен его владельцем. Обычно владелец имеет все права: чтение, запись и выполнение.
2.Группа (g — group). Когда в Linux создается пользователь, то для него создается одноименная группа. Однако средствами администрирования системы можно объединять пользователей в различные группы. При этом конкретный пользователь может входить в состав нескольких групп. Группы позволяют предоставлять права доступа сразу нескольким людям, но при этом ограниченному кругу лиц.
124
3. Остальные (o — other). Все прочие пользователи, которые не являются владельцем файла и не принадлежат к группе владельца файла.
Таким образом, у каждого файла в атрибутах есть девять записей о правах, показывающих, кто и что может делать с файлом. Посмотреть их можно, выполнив команду «ls» с ключом «-l». Пример такого вывода показан ниже.
-[yulbarisov@pm04 Test]$ ls -l
-total 28
--rw-r--r-- 1 yulbarisov pamela 1055 Nov 22 2021 DrawIoniza-
tion.py
--rw-r--r-- 1 yulbarisov pamela 156 Oct 14 2021 DrawIoniza-
tion.sh
- |
-rw-r--r-- 1 pamela |
pamela 28 Aug 24 16:36 FileUserPame- |
||
la.txt |
-rw-r--r-- 1 pamtreat |
pamela |
30 Aug 24 16:32 |
|
- |
||||
FileUserPamtreat.txt
--rw-r--r-- 1 yulbarisov pamela 116 Nov 16 2021 Loop.sh
-drwxr-xr-x 2 yulbarisov pamela 4096 Nov 16 2021 plot
--rw-r--r-- 1 yulbarisov pamela 146 Oct 14 2021 RunDI.sh
Первый столбец начинается с символа, обозначающего тип файла. Как правило, это либо обычный файл «-», либо директория «d». После него в буквенной нотации указаны права для владельца, для группы и для всех остальных:
--rw-r--r-- 1 pamtreat pamela 30 Aug 24 16:32 FileUserPamtreat.txt
Втретьем и четвертом столбцах выводятся имена владельца и группы соответственно. Изменять права доступа можно с помощью команды «chmod». В качестве аргументов она принимает настройки права доступа и имя файла. Настройки, в свою очередь, состоят из указания категории, для которой изменяются права (u, g, o), действия (добавить «+» или убрать «-») и флага (r, w, x). Например, строка
-$ chmod g+w FileUserPamtreat.txt
добавляет группе права на запись в файл «FileUserPamtreat.txt».
8.1.3. Переменные окружения
Подобно большинству языков программирования, командный интерпретатор имеет переменные, которые называют еще ключевыми параметрами (поскольку они передаются по имени — ключу). Переменные можно создавать, изменять и выбирать их значения. Для присваивания значения переменной применяется конструкция:
-$ variable=value
Обратите внимание на отсутствие пробелов до и после знака присваивания.
Все переменные в командном интерпретаторе — строковые, поэтому тип переменной задавать не надо. Присваиваемое значение «value» должно выражаться одним словом, и его следует взять в кавычки, если оно содержит метасимволы, которые не нужно обрабатывать (например, пробел). Чтобы извлечь значение переменной, необходимо написать ее имя в нужной части строки (или скрипта),
аперед именем поставить знак $:
-$ s="Hello, world!"
-$ echo $s
Некоторые команды интерпретируют строки как числа и позволяют осуществлять с ними целочисленную арифметику:
-$ a=2
-$ b=3
-$ let c=a+b
-$ echo
-$c
-$ let d=a*b
-$ echo
-$d
8.1.4. Написание скриптов
126
В простейшем случае скрипт (называемый также «сценарий») — просто список команд, записанных в файл. Для запуска сценария необходимо сделать файл исполняемым и написать в терминале его полное имя:
-$ chmod +x scriptfile
-$ ./scriptfile
Кроме того, передать такой файл на исполнение к Bash можно и явно, используя команду «bash»:
-$ bash scriptfile
Вэтом случае не требуется давать файлу скрипта права на исполнение.
Зачастую сценарии используются для установки переменных окружения. Поскольку у переменных есть область видимости, при исполнении скрипта их значения будут утеряны. Чтобы избежать этого, следует использовать определенную внутри Bash команду: «.» (точка) или «source»:
-$ . scriptfile
Вызов этой команды из терминала эквивалентен построчной передаче кода командному процессору. Внутри сценария команда «. scriptfile» встраивает код из «scriptfile» в то место, где она была прописана. Таким образом, она напоминает директиву препроцессора языка «C/C++ #include».
8.2. Система пакетной обработки Torque
Torque (Terascale Open-Source Resource and QUEue Manager) — менеджер распределенных ресурсов для вычислительных кластеров из машин под управлением Linux и других Unix-подобных операционных систем, одна из современных версий Portable Batch System (PBS) [7, 8]. Он позволяет автоматически распределять вычислительные ресурсы между задачами, управлять порядком их запуска, временем работы, получать информацию о состоянии очередей.
127
При невозможности немедленного запуска задач они ставятся в очередь и ожидают, пока не освободятся нужные ресурсы.
В результате применения Torque вычислительные ресурсы используются оптимально: сводится к минимуму как перегрузка ка- кого-либо одного узла, так и его простой. Обычно он используется в областях, где высока интенсивность использования вычислительных мощностей.
8.2.1. Понятия задания и очереди
Задание Torque представляет собой скрипт, содержащий требования к ресурсам, атрибуты задания и набор команд, которые необходимо выполнить. Однажды созданный скрипт задания можно использовать столько раз, сколько необходимо. Задание необходимо поставить в очередь Torque (submit), затем из этой очереди оно будет передано на один из узлов для выполнения. Очередей заданий (batch queue) может быть несколько.
Пример простого скрипта задания:
-#PBS -l walltime=1:00:00
-#PBS -l mem=400mb
-#PBS -j oe
-python3 script.py
-echo "Done!"
Первые три строки являются директивами Torque. Опция «-l» означает запрос определенного ресурса. В приведенном примере запрашиваются ресурсы, объем которых предполагает не более одного часа на выполнение и 400 Мб оперативной памяти. Опция «–j» требует, чтобы Torque объединила (join) потоки вывода «stdout» и «stderr» в единый поток «stdout». Оставшаяся часть сценария содержит список команд или задач, которые пользователь желает запустить.
Очередь Torque — это сущность, содержащая задания. Задания в очередях могут находиться в различных состояниях. Ниже перечислены возможные варианты (табл. 8.2.).
128
|
Таблица 8.2 |
|
Сокращение |
Описание |
|
C (complete) |
Задание успешно завершило свою работу |
|
E (exit) |
Прерывание работы задания |
|
H (hold) |
Задание заблокировано |
|
Q (queued) |
Задание поставлено в очередь и готово для выпол- |
|
нения |
||
|
||
R (running) |
Задание выполняется |
|
T (transiting) |
Задание перемещается в другое место (очередь) |
|
W (waiting) |
Задание ожидает, пока настанет время для его вы- |
|
полнения |
||
|
||
S (suspended) |
Пауза в работе задания |
8.2.2. Постановка заданий в очередь
Команда «qsub» предназначена для постановки задания с различными параметрами в одну из существующих очередей. Предположим, у нас есть скрипт с описанием задания под названием «task.sh». Его постановка в очередь «queue» выглядит следующим образом:
-$ qsub -q queue task.sh
Ключ «-q» указывает на выбор очереди с названием, указанным после пробела. После успешной постановки в очередь задания Torque возвращает его идентификатор (job identifier). Идентификатор необходим для любого действия, затрагивающего задание, такого, как проверка статуса задания, модификация задания, отслеживание или удаление задания.
129
Опция «-v» позволяет передавать заданию переменные окружения из текущей терминальной сессии. Синтаксис использования этого ключа выглядит следующим образом:
-$ qsub -q queue -v variable_list task.sh,
где «variable_list» — перечень переменных в формате «variable» или «variable=value», разделенных запятыми.
8.2.3. Удаление заданий.
Команда «qdel». Удаление заданий производится командой «qdel». Задание может быть удалено пользователем, отправившим его в очередь, оператором и администратором Torque. В качестве аргумента «qdel» указывается один или несколько идентификаторов заданий:
-$ qdel 4558741 4558756 4558763 4558775 4558783
Также можно попросить систему удалить все отправленные задания:
-$ qdel all
При удалении сервером пакетного задания будет отправлен сигнал SIGTERM, за которым следует сигнал SIGKILL. Временная задержка между двумя сигналами является атрибутом очереди выполнения, из которой было запущено задание. Эта задержка может быть изменена параметром «-W».
8.2.4. Информация о заданиях. Команда «qstat»
Вывод информации о состоянии заданий и очередей на сервере, а также о состоянии самого сервера, осуществляется командой «qstat». При этом не будут отображаться состояния заданий, на которые пользователь не имеет прав. Выполнение «qstat» без какихлибо опций отображает информацию о заданиях в формате по умолчанию:
-$ qstat
130
Отображается следующая информация о заданиях:
•идентификатор задания, присвоенный системой;
•название задания, присвоенное инициатором зада-
ния;
•владелец задания;
•используемое процессорное время;
•состояние задания;
•очередь, в которой находится задание.
Добавление к команде опции «-Q» указывает, что запрос относится к статусу очередей:
-$ qstat -Q
Вэтом случае для каждой очереди будут выведены следующие параметры:
•имя очереди;
•максимальное количество заданий, которые одновременно могут выполняться в очереди;
•общее количество заданий в очереди;
•статус очереди: включена/выключена;
•статус очереди: запущена/остановлена;
•количество заданий, находящихся в том или ином состоянии;
•состояние очереди, задаваемое парой букв:
-E (Enabled), если очередь включена, или D (Disabled), если отключена;
-R (Running), если очередь запущена, или S (Stopped), если остановлена.
Отображение статуса сервера производится добавлением опции «-B»:
-$ qstat -B
При этом отображается следующая информация о сервере:
•имя сервера;
131
•максимальное количество заданий, которые одновременно могут выполняться на сервере;
•общее количество заданий, управляемых сервером в данный момент;
•количество заданий, находящихся в том или ином состоянии;
•состояние сервера.
8.3.ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
Лабораторная работа состоит из трех частей: знакомство с Bash, удаленная обработка данных на сервере и многопоточная обработка данных с использованием распределительной системы PBS.
8.3.1.Знакомство с Bash и работой на сервере
Вработе предлагается использовать программы MobaXterm и WinSCP для удаленного подключения к серверу (рис. 8.1).
Рис. 8.1. Подключение к серверу через MobaXterm
132
Откройте MobaXterm, начните новую SSH сессию, заполните поля «Specify username» и «Remote host» и нажмите OK. Перед вами откроется окно терминала. Наберите
-$ echo "Hello, world!"
Выведите на экран директорию, в которой вы сейчас находитесь:
-$ pwd
Перейдите в каталог для лабораторных работ и выведите в терминал его содержимое:
-$ cd /lustre/Astronomy/Linux
-$ ls -l 8
Создайте директорию и назовите (например, своей фамилией). Удостоверьтесь в том, что она действительно появилась в списке содержимого, и перейдите внутрь. Обратите внимание, что если директория назначения находится внутри текущей, то при использовании команды «cd» не обязательно прописывать полный путь с корневого каталога:
-$ mkdir YourFamily
-$ ls -l $ cd YourFamily
Выведите на экран историю введенных текущим пользователем команд. Затем перенаправьте вывод этой команды в файл «history_output». Выведите на экран содержимое каталога, чтобы удостовериться, что файл в нем появился. Откройте его текстовым редактором Vim или выведите его содержимое в терминал с помощью команды «cat». Для выхода из Vim наберите «:q»:
-$ history
-$ history > history_output
-$ ls -l $ vim history_output
-$ cat history_output
133
Создайте директорию «dirname» и скопируйте туда файл «history_output». Не забывайте о возможности автодополнения имен при нажатии клавиши «Tab»:
-$ mkdir dirname
-$ ls –l
-$ cp history_output dirname/
-$ ls -l dirname/
Измените права доступа у файла «history_output», убрав права на чтение и запись. Попробуйте вывести в терминал его содержимое:
-$ chmod -rw history_output
-$ ls -l
-$ cat history_output
Измените права доступа у директории dirname, убрав права на чтение. Попробуйте вывести в терминал ее содержимое, причем сделать это изнутри каталога:
-$ chmod -r dirname
-$ ls -l
-$ ls -l dirname/
-$ cd dirname/
-$ ls -l
-$ cd ..
Измените права доступа у директории «dirname», убрав права на исполнение. Попробуйте теперь перейти внутрь:
-$ chmod -x dirname
-$ ls -l
-$ cd dirname/
Удалите файл «history_output» и директорию «dirname» вместе с содержимым. Поскольку командному интерпретатору необходима информация о содержимом каталога, предварительно нужно вернуть ему права на чтение. Кроме того, для удаления верните «dirname» права на исполнение:
134
-$ rm -f history_output
-$ chmod +rx dirname/
-$ rm -rf dirname/
-$ ls -l
Создайте переменную окружения «a» и присвойте ей значение «1». Создайте переменную окружения «s» и присвойте ей значение «Text». Попробуйте вывести в терминал «a» с использованием и без использования разыменования:
-$ a=1
-$ s="Text"
-$ echo a
-$ echo s
-$ echo $a
-$ echo $ s
Создайте переменную окружения «b» и присвойте ей значение «2». Выведите сумму «a» и «b».
-$ b=2
-$ echo $a+$b
-$ echo $((a+b))
8.3.2.Обработка данных на сервере
Вэтой части лабораторной работы предлагается обработать экспериментальные данные спектрометра PAMELA. Для физического анализа данные, полученные непосредственно со спутника, прошли несколько уровней обработки стандартным коллаборационным ПО. Самый высокий уровень – Level3 – представляет собой набор физи-
ческих переменных, сохраненных в формате «.mat».
Они распределены по классам, часть которых |
соответствует детек- |
|||
торным |
подсистемам |
спектрометра, |
и |
собраны |
в суточные файлы. Классы находятся в директории: /lustre/PAMELA/Experiment/10red/std/L3idealUpd2/Mat/.
135
Выполните скрипт «set_env.sh». Он устанавливает в системе переменные окружения, содержащие пути к библиотекам Python. Запустите Python:
-$ . /lustre/incos/set_env.sh python-3.10.4-x64
-$ python3
Импортируйте библиотеки numpy, scipy и matplotlib:
->>> import numpy as np
->>> import scipy.io as sio
->>> import matplotlib.pyplot as plt
Создайте переменную «path» и сохраните в нее путь к экспериментальным данным. С помощью метода loadmat библиотеки scipy подгрузите файл из класса ACToF за 300-й день:
->>> path = ’/lustre/PAMELA/Experiment/10red/std/L3idealUpd2/Mat/’
->>> data_ACToF = sio.loadmat(path + ’ACToF/ACToF_300.mat’)
Загруженные данные помещаются в словарь, ключи которого являются названиями переменных. Сами переменные представляют собой numpy-массивы. Выведите список переменных, содержащихся внутри «data_ACToF»:
->>> data_ACToF.keys()
Подгрузите в «data_ACToF» только переменную «dEdxtof», а также загрузите переменную «Rig» из класса «Tracker» и переменную «Event» из класса «NTrack» за 300-й день. Извлеките эти данные в отдельные numpy-массивы:
->>> data_Tracker = sio.loadmat(path + ’Tracker/Tracker_300.mat’, variable_names=’Rig’)
->>> data_NTrack = sio.loadmat(path + ’NTrack/NTrack_300.mat’, variable_names=’Event’)
->>> data_ACToF = sio.loadmat(path + ’ACToF/ACToF_300.mat’, variable_names=’dEdxtof’)
136
->>> Rig = data_Tracker[’Rig’]
->>> Event = data_NTrack[’Event’]
->>> dEdxtof = data_ACToF[’dEdxtof’]
Переменная «dEdxtof» содержит значения ионизационных потерь частицы в каждой плоскости ВПС (им соответствуют шесть столбцов) для всех событий в сутках. «Rig» — это жесткости, измеренные трековой системой. Они определены у событий, для которых восстановлен трек, поэтому размер этой переменной меньше, чем «dEdxtof». «Event» содержит номера событий, для которых удалось восстановить трек.
Постройте распределение значений ионизационных потерь частиц в зависимости от их жесткости. Чтобы избежать слипания точек на графике, задайте их размер равным 1 и толщину границы равной 0. Сохраните полученное распределение в вашу директорию на сервер:
->>> fig, ax = plt.subplots()
->>> ax.plot(Rig, dEdxtof[Event-1, 0], linestyle=’’, marker=’.’, markeredgewidth=0, markersize=1)
->>> ax.set_xlim(0, 10)
->>> ax.set_ylim(0, 16)
->>> fig.savefig(’plot_300.png’, dpi=600)
Один из способов посмотреть сохраненную картинку — скачать ее на локальный компьютер. Это удобно делать с помощью программы WinSCP, предоставляющей графический интерфейс, который позволяет просматривать каталоги на удаленном сервере и осуществлять обмен файлами (рис. 8.2).
137
Рис. 8.2. Подключение к серверу через WinSCP
Запустите программу WinSCP, ведите имя хоста, имя пользователя и пароль. Подключитесь к серверу, перейдите в созданную директорию и скачайте картинку с распределением на свой компьютер.
Объедините исполненные строки кода в Python-скрипт. Модифицируйте его: номер дня, за который подгружаются экспериментальные данные, должен теперь быть параметром, передаваемым из командной строки. Для комфортной работы можно использовать текстовый редактор на локальном компьютере (например, в Блокноте), а затем с помощью WinSCP загружать файл в свою директорию на сервере.
Считывание параметров из командной строки можно реализовать с помощью модуля «argparse». Первым шагом в его использовании является создание парсера «ArgumentParser» путем создания экземпляра класса «argparse.ArgumentParser()»:
138
- >>> parser = argparse.ArgumentParser(description=’Plot ionization losses in ToF system’)
Заполнение объекта «ArgumentParser» информацией об аргументах осуществляется путем вызова метода «parser.add_argument()». Внутри него описывается тип считываемых данных, справочная информация об их назначении и многое другое:
->>> parser.add_argument(’day’, type=int, help=’Pamday’)
После того как определены все аргументы, вызывается метод «parser.parse_args()», сохраняющий их значения. К ним можно обращаться через точку как к полям структуры:
->>> args = parser.parse_args()
->>> day = args.day
Назовите ваш скрипт (например, DrawIonization.py) и попробуйте несколько раз вызвать его, передавая на вход различные дни:
-$ python3 DrawIonization.py 305
-$ python3 DrawIonization.py 310
Пример того, как может выглядеть в конечном итоге скрипт, приведен в приложении. Создайте Bash-скрипт, вызывающий DrawIonization.py и передающий ему на вход параметр:
-cd /lustre/Astronomy/Linux/YourFamily
-. /lustre/incos/set_env.sh python-3.9.1-x64
-day=300
-python3 DrawIonization.py $day
Снова назовите ваш скрипт (например, DrawIonization.sh) и проверьте его работоспособность. Он пригодится в третьей части работы:
-$ . DrawIonization.sh
8.3.3.Работа с cистемой пакетной обработки Torque
Выведите на экран состояние очередей:
139
-$ qstat -Q
Атеперь выведите состояние заданий, отправленных в очереди:
-$ qstat
Отправьте созданный вами Bash-скрипт на исполнение в очередь «pamela». Убедитесь, что система отреагировала на ваш запрос и сформировала задание:
-$ qsub -q pamela DrawIonization.sh
-$ qstat
Измените ваш Bash-скрипт, удалив в нем строку, задающую день. Пусть этот параметр передается теперь с помощью опции -v команды qsub. Снова отправьте скрипт в очередь.
-$ qsub -q pamela -v day=310 DrawIonization.sh
-$ qstat
Создайте еще один скрипт, в котором постановка задач в очередь происходит в цикле:
-for ((i=300; i < 320; i++))
-do
-echo $i
-qsub -q pamela -v day=$i DrawIonization.sh
-done
Назовите ваш скрипт (например, RunDI.sh), запустите его и выведите на экран состояние задач:
-$ . RunDI.sh
-$ qstat
Дождитесь, когда задачи завершат свою работу, и откройте полученные распределения ионизационных потерь. Это конечный результат лабораторной работы.
140
