Назад | Перейти на главную страницу

Ограничение максимального времени процессора для программ, запускаемых пользователем

У нас есть кластер под управлением CentOS с Sun Grid Engine для исследовательского моделирования. Однако некоторые пользователи, которые не слишком знакомы с системой, в конечном итоге запускают задания на головном узле, что, конечно, замедляет работу всех остальных.

В будущем я хотел бы разместить сообщение входа в систему SSH, предупреждающее людей о максимальном времени выполнения программ, запускаемых пользователями непосредственно на головном узле, но также разрешить выполнение длинных заданий (например, больших операций tar / gzip), если они приятно это.

TL; DR: как мне ограничить задания, выполняемые пользователями, до 24 часов времени ЦП, если значение nice <= 0?

Вы можете попробовать написать сценарий, который проверяет выполняемые задания, записывает их использование и решает, что делать после определенного количества. Вы также можете попробовать И - Auto Nice Daemon и ulimits/PAM limits к ограничить время процессора пользователя (после того, как пользователь использует столько времени процессора, процессы / сеансы завершаются).

Не полное решение, но впоследствии я нашел нужную команду:

ps alr | sed 1d | awk '{print ($6 <= 0)? $2 " " $3 " " $12 : ""}' | grep -v "^$"

В котором перечислены все запущенные задания с хорошим значением <= 0 в трех столбцах, состоящих из UID, PID и общего времени выполнения, как такового:

543 3208 11436:31
511 16491 0:00

Я надеюсь, что это относительно простой вопрос - настроить задание cron для анализа этих данных, проверки UID и, при необходимости, уничтожения заданий.

с помощью cpulimit; в debian есть в репозиториях, но не в centos. Здесь у них есть инструкции по его компиляции и использованию: ссылка на сайт. Если у вас есть кластер, просто скомпилируйте его на одной резервной машине, протестируйте и разверните с помощью инструмента управления конфигурацией, такого как cfengine.