скрипт оболочки для управления количеством процессов пользователя

скрипт оболочки для управления количеством процессов пользователя

Мне нужно запустить общее количество, NUMTOT программ (может быть любым, C, Mathematica, ns-2... математические среды). Проблема в том, что компьютер, на котором работают эти процессы, допускает только максимальное количество запусков, например MAX, (MAX < NUMTOT).

Я запускаю эти программы с помощью следующей строки в терминале

./run.sh -d directory num

многократно, где run.sh — скрипт, из которого я вызываю математическую программу; directory — каталог, в котором находится моя программа, а num указывает количество новых запусков (integer*num = NUM). Скрипт 'run.sh' создает 'num' каталогов с копией 'directory' (программы) и запускает 'num' экземпляров программы. В моем случае это экземпляры Matlab.

Мне нужен скрипт, который автоматически отслеживает количество запущенных процессов и когда максимальное количество уменьшается до (MAX-num), поскольку «num» уже завершено, запускает следующие «num» симуляций Matlab, пока не будет завершено общее NUM симуляций.

Было бы еще лучше, если бы скрипт мог поддерживать МАКСИМУМ возможных процессов, просто вызывая следующую программу, когда только одна из них только что завершилась.

На самом деле, чтобы узнать количество запущенных процессов, я запускаю следующий скрипт

ps axu |grep plopez|grep simulacion|grep MATLAB|awk '{ $2} END{print NR}'

что дает общее количество Matlab, работающих в данный момент.

Как можно создать весь набор симуляций всего лишь с помощью одного скрипта?

решение1

Обычный способ принудительного ограничения максимального количества процессов пользователем — через pam_limits(8). Проверьте limits.conf(5)страницу руководства для получения подробной информации и примеров для изменения вашего /etc/security/limits.confсоответствующего значения.

В частности, вы хотите настроить nprocпараметр:

 nproc
    maximum number of processes

Пример из man-страницы с использованием этого параметра:

       @faculty        soft    nproc           20
       @faculty        hard    nproc           50

решение2

Вместо периодической проверки количества запущенных экземпляров я бы предложил написать скрипт, который запускает программу снова и снова, пока NUMне будет достигнуто заданное количество раз, и запускать этот скрипт MAXпараллельно.

Вы также можете перехватить SIGCHLDсигнал, который испускается при завершении дочернего процесса. Это должно быть включено сначала с помощью set -o monitor. Более подробный пример и альтернативы можно найти вветка на Stackoverflow.

решение3

Если ваши задания MATLAB неинтерактивны (т. е. выполняют пакетный скрипт), то вам может понадобиться программное обеспечение для пакетного планирования, напримерКрутящий моментилиСлёрм- именно для такого управления ресурсами они и предназначены.

Обычно они используются в кластерах HPC, но в вашем случае у вас будет кластер только с одним вычислительным узлом.

Slurm имеет преимущество в том, что это современная, хорошо спроектированная система, использующая многолетний опыт работы с другими планировщиками. Torque/PBS имеет преимущество в том, что он знаком — многие люди уже использовали его на других кластерах. Slurm имеет набор оболочек совместимости, так что люди, привыкшие к PBS или Torque, могут начать использовать его немедленно с помощью знакомых команд.

В любом случае у вас будет много вариантов управления планированием заданий — по ядрам процессора, памяти, доступным лицензиям и т. д. Они также обеспечивают учет, если вам нужно отслеживать или ограничивать совокупное использование на пользователя. Например, в Slurm есть опция взвешивания справедливого использования, которую можно использовать для приоритизации заданий людей, которые в последнее время не запускали много заданий, по сравнению с людьми, которые много использовали систему — что часто лучше, чем фиксированная жесткая квота общего времени процессора.

Другой вариант обойти ограничения лицензий — написать скрипты MATLAB так, чтобы они были совместимы сОктава GNUа также MATLAB. Затем вы можете запустить столько тестовых/разработочных запусков, сколько вам нужно, и выполнить финальный запуск в MATLAB, если это необходимо для публикации ваших результатов или совместной работы с другими исследователями. Octave в основном совместим с MATLAB, но есть некоторые различия - воткраткое содержание.

решение4

Анответ в другой теме, посвященной ограничению количества подпроцессов в bashпоказывает следующий фрагмент, который будет ожидать завершения одного из 4 заданий, проверяя каждые десять секунд.

while [ $(jobs | wc -l) -ge 4 ] ; do sleep 10 ; done

Помните, что такая активная стратегия сна довольно неэффективна, груба и неточна.

Связанный контент