Как повысить приоритет процесса, не предоставив этому пользователю права суперпользователя?

3718
Myrddin Emrys

У меня высокоприоритетное обслуживание, с которого я начинаю sudo nice -n -10 process. Этот процесс не требует прав суперпользователя, за исключением повышения приоритета. Но nice требует привилегий суперпользователя для повышения приоритета.

Как запустить процесс с повышенным приоритетом, не выполняя при этом права root?

4

3 ответа на вопрос

3
maxelost

Проверьте /etc/security/limits.conf. Там вы можете указать, какие приоритеты разрешено использовать пользователям или группам. Страница справочника:man 5 limits.conf

Спасибо, любезно. Я могу установить минимальный приоритет для пользователя -10 и полностью пропустить использование sudo. Myrddin Emrys 13 лет назад 0
1
Myrddin Emrys

Одна из возможностей заключается в следующем (о чем я только что подумал, спросив):

sudo nice -10 sudo -u user command

Но, похоже, должен быть более элегантный метод.

1
LaC

Другая возможность - sudo reniceизменить приоритет процесса после его запуска. Чтобы получить PID процесса, вы можете использовать psи sed, или вы можете запустить его в фоновом режиме и получить его процесс непосредственно из оболочки:

process & pid=$! sudo renice -10 $pid fg $pid # if you don't want it in background 

Обратите внимание, что если процесс порождает другие процессы и завершается, он, вероятно, сделает это к моменту запуска renice, так что вы захотите использовать psдля получения PID дочернего процесса / процессов и перезапустить их.

Это будет работать, но я думаю, что это даже более неловко, чем ответ, который я дал (`sudo nice -10 sudo -u user command`) Myrddin Emrys 13 лет назад 0
Однако этот ответ не портит окружение, как `sudo`. Например, `sudo` сбросит` LD_LIBRARY_PATH` даже с `-E`. Trevor Robinson 10 лет назад 0
Также обратите внимание, что `fg` можно использовать только из интерактивной оболочки; вам нужно использовать `wait` вместо сценариев. Trevor Robinson 10 лет назад 0

Похожие вопросы