Як я можу дозволити користувачеві розставити пріоритет процесу на негативну приємність?


12

Я хочу, щоб користувач запустив певний процес у системі з негативним приємним значенням. Я не можу просто відкинути процес на другий план, оскільки ця конкретна програма є сервером minecraft, і я покладаюся на командний рядок для управління сервером.

Мій поточний сценарій bash виглядає приблизно так (важлива частина):

sleep 10 && \
sudo renice -n $NICENESS $(ps -u $(id -u) -o "%p:%c" | sed -n "s/:java$//p") & \
java -Xmx8G -Xms2G -jar minecraft_server.jar nogui    

sleepпросто затримує виконання renice. reniceвикористовує psдля перевірки Java-процесу за допомогою власного ідентифікатора користувачів. Можуть бути й інші випадки нересту java у різних користувачів, але сервер minecraft працює під своїм власним користувачем minecraft .

Я, очевидно, не хочу вводити пароль щоразу, коли запускаю сервер.
від / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

Чи є більш елегантний спосіб це зробити? Просто використання nice- це не варіант, sudo nice bashу поєднанні з NOPASSWD: варіант буде великою проблемою безпеки.

Відповіді:


9

Модуль pam_limits.so може допомогти вам там.

Це дозволяє встановити певні обмеження для конкретних окремих користувачів та груп або макіяжів або діапазонів користувачів та груп.

Обмеження, які ви можете встановити, - це як правило, обмеження налаштувань, але також і кількість одночасних сеансів входу, процеси, час процесора, пріоритет за замовчуванням та максимальний пріоритет (renice). Перевірте докладнішу сторінку limit.conf для отримання додаткової інформації.

Наприклад, ви можете налаштувати свою групу розумних апаратів так, щоб усі її процеси розпочалися зі збільшеним пріоритетом за замовчуванням, і ви можете дозволити їм використовувати приємні та відновлювати команди для збільшення пріоритету важливих завдань вручну, а не лише зменшувати пріоритет.

# /etc/security/limits.conf
# increase default and max prio for members of the mindcraft group
@mindcraft   hard priority -10
@mindcraft   hard nice     -18   

4
Встановлення лише жорсткого обмеження для niceцього, схоже, не робиться, мені довелося встановити обидва, використовуючи -.
Baarn

Схоже, це не працює для мене на Ubuntu 16.04. Я встановив priorityзначення -10 і nice-15, і мені завжди отримують "дозвіл відмовлено", навіть коли я намагаюся використовувати "nice -n -2" на чомусь. Чи потрібно перезавантажуватись? Я щойно вийшов із системи та знову, згідно з цією порадою .
Річард Вісман

Оновлення в моєму попередньому дописі ... Після перезавантаження я виявив, що priorityналаштування має ефект, але niceналаштування дозволяє лише зменшити пріоритет. Коли я починаю щось із пріоритетом за замовчуванням, це зараз -10. Я можу reniceпроцес до -9, але потім не можу reniceповернутися до -10.
Річард Вісман

Оновлення 2: Я це розробив! Саме використання hardвикликало проблеми. Я змінив це на -замість цього і зараз все працює нормально. Ця відповідь допомогла мені дійти до її суті. Я думаю, що проблема полягала в тому, що у мене був м'який ліміт, який заважав, можливо, якось перекриваючи жорстку межу. У всякому разі, -замість того , щоб hardзафіксувати це для мене.
Річард Вісман

1

Використовувати reniceбез цього sudoбуло б неможливо. Я цитую зі renice(1)сторінки man:

Користувачі, крім суперкористувача, можуть змінювати лише пріоритет процесів, якими вони володіють, і можуть лише монотонно збільшувати своє `` приємне значення '' (з міркувань безпеки) в межах від 0 до PRIO_MAX (20), якщо тільки хороший ліміт ресурсів не є набір (Linux 2.6.12 і вище).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.