Я хочу, чтобы пользователь запускал определенный процесс в системе с отрицательным значением nice. Я не могу просто перевести процесс в фоновый режим, поскольку эта конкретная программа является сервером 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: было бы большой проблемой безопасности.
источник
nice
, кажется, не делает этого, я должен был установить оба, используя-
.priority
-10 иnice
-15, и я всегда получаю «разрешение запрещено», даже когда я пытаюсь использовать «nice -n -2» для чего-то. Нужно ли перезагружаться? Я только что вышел и снова в соответствии с этим советом .priority
настройка действует, ноnice
настройка позволяет только уменьшить приоритет. Когда я запускаю что-то с приоритетом по умолчанию, сейчас это -10. Я могуrenice
обработать до -9, но потом не могуrenice
вернуться к -10.hard
которое вызвало проблемы. Я изменил его-
вместо этого, и теперь все работает нормально. Этот ответ помог мне докопаться до сути. Я думаю, что проблема заключалась в том, что у меня был мягкий предел, который мешал, возможно, переопределял жесткий предел каким-то образом. Во всяком случае,-
вместо того , чтобыhard
исправить это для меня.Использование
renice
безsudo
было бы невозможно. Я цитирую соrenice(1)
страницы руководства :источник