Jak mogę pozwolić użytkownikowi na ustalenie priorytetu procesu w stosunku do negatywnej?


12

Chcę, aby użytkownik uruchomił w systemie określony proces z ujemną wartością ładną. Nie mogę po prostu rozwidlić procesu na tło, ponieważ ten konkretny program jest serwerem Minecraft i polegam na linii poleceń do kontrolowania serwera.

Mój obecny skrypt bash wygląda następująco (ważna część):

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    

sleeppo prostu opóźnia wykonanie renice. renicesam używa psdo sprawdzania procesu Java za pomocą własnego identyfikatora użytkownika. Mogą istnieć inne przypadki odradzania się Java dla różnych użytkowników, ale serwer Minecraft działa pod własnym minecraftem użytkownika .

Oczywiście nie chcę wpisywać hasła przy każdym uruchomieniu serwera.
z / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

Czy jest na to bardziej elegancki sposób? Proste użycie nicenie jest opcją, sudo nice bashw połączeniu z NOPASSWD: opcja byłaby świetnym problemem bezpieczeństwa.

Odpowiedzi:


9

Moduł pam_limits.so może ci w tym pomóc.

Pozwala ustawić określone limity dla konkretnych indywidualnych użytkowników i grup lub symboli wieloznacznych lub zakresów użytkowników i grup.

Limity, które można ustawić, to zazwyczaj ustawienia ulimit, ale także liczba równoczesnych sesji logowania, procesów, czasu procesora, domyślnego priorytetu i maksymalnego priorytetu (renice). Więcej informacji na stronie podręcznika limit.conf.

Na przykład możesz skonfigurować swoją grupę Mindcraft, aby wszystkie jej procesy były uruchamiane ze zwiększonym domyślnym priorytetem i możesz pozwolić im używać poleceń nice i renice, aby ręcznie zwiększać priorytet ich ważnych zadań, a nie tylko zmniejszać priorytet.

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

4
niceWydaje się, że ustawienie tylko twardego limitu na to nie pozwala, musiałem ustawić oba, używając -.
Baarn

Wydaje się, że w ogóle nie działa dla mnie na Ubuntu 16.04. Ustawiłem priorityna -10 i nicena -15 i zawsze dostaję „odmowę dostępu”, nawet gdy próbuję użyć „nice -n -2” na czymś. Czy muszę się restartować? Właśnie się wylogowałem i zalogowałem zgodnie z tą radą .
Richard Wiseman,

Zaktualizuj mój poprzedni post ... Od czasu ponownego uruchomienia odkryłem, że priorityustawienie ma wpływ, ale niceustawienie pozwala mi tylko zmniejszyć priorytet. Kiedy zaczynam coś z domyślnym priorytetem, teraz jest to -10. Mogę reniceprzetworzyć na -9, ale potem nie mogę renicewrócić do -10.
Richard Wiseman,

Aktualizacja 2: Rozpracowałem to! Używanie hardpowodowało problemy. -Zamiast tego zmieniłem na i wszystko działa teraz dobrze. Ta odpowiedź pomogła mi dojść do sedna. Myślę, że problem polegał na tym, że miałem przeszkodę, która przeszkadzała, być może w jakiś sposób nadpisując twardy limit. W każdym razie -zamiast hardmnie to naprawić.
Richard Wiseman,

1

Używanie renicebez sudobyłoby niemożliwe. Cytuję ze strony podręcznika renice(1):

Użytkownicy inni niż superużytkownik mogą jedynie zmieniać priorytet własnych procesów i mogą jedynie monotonicznie zwiększać swoją `` niezłą wartość '' (ze względów bezpieczeństwa) w zakresie od 0 do PRIO_MAX (20), chyba że dobry limit zasobów to zestaw (Linux 2.6.12 i wyższy).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.