Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ядерно-физические приборы (7 сем) / Сборник_лабораторных_работ

.pdf
Скачиваний:
0
Добавлен:
21.04.2026
Размер:
8.07 Mб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №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

125

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