Come posso consentire a un utente di assegnare la priorità a un processo in base a una gentilezza negativa?


12

Voglio che un utente esegua un processo specifico sul sistema con un valore negativo negativo. Non posso semplicemente spostare il processo in background poiché questo programma specifico è un server Minecraft e mi affido alla riga di comando per controllare il server.

Il mio attuale script bash è simile al seguente (la parte importante):

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    

sleepritarda semplicemente l'esecuzione di renice. renicestesso utilizza psper verificare la presenza di un processo Java utilizzando il proprio ID utente. Potrebbero esserci altri casi di generazione di java sotto utenti diversi, ma il server Minecraft viene eseguito con il proprio Minecraft utente .

Ovviamente non voglio inserire una password ogni volta che avvio il server.
da / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

C'è un modo più elegante per farlo? Il semplice utilizzo nicenon è un'opzione, sudo nice bashin combinazione con NOPASSWD: l' opzione sarebbe un grande problema di sicurezza.

Risposte:


9

Il modulo pam_limits.so può aiutarti.

Consente di impostare determinati limiti su singoli utenti e gruppi specifici o caratteri jolly o intervalli di utenti e gruppi.

I limiti che è possibile impostare sono in genere le impostazioni ulimit ma anche il numero di sessioni di accesso simultanee, processi, tempo della CPU, priorità predefinita e priorità massima (renice). Controlla la pagina man limits.conf per ulteriori informazioni.

Ad esempio, puoi configurare il tuo gruppo di Mindcraft in modo che tutti i loro processi siano avviati con una priorità predefinita aumentata e puoi consentire loro di usare i comandi nice e renice per aumentare manualmente la priorità dei loro lavori importanti invece di ridurre solo la priorità.

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

4
Impostare solo il limite rigido per nicenon sembra farlo, ho dovuto impostare entrambi, usando -.
Baarn,

Non sembra funzionare per me su Ubuntu 16.04. Ho impostato prioritysu -10 e nice-15 e ricevo sempre "permesso negato" anche quando provo a usare "nice -n -2" su qualcosa. Devo riavviare? Mi sono appena disconnesso e riconnesso secondo questo consiglio .
Richard Wiseman,

Aggiornamento sul mio post precedente ... Dal riavvio ho scoperto che l' priorityimpostazione ha effetto, ma l' niceimpostazione mi consente solo di ridurre la priorità. Quando inizio qualcosa con la priorità predefinita, ora è -10. Posso fare reniceil processo a -9 ma poi non posso renicetornare a -10.
Richard Wiseman,

Aggiornamento 2: l'ho risolto! Stava usando hardciò che ha causato i problemi. L'ho cambiato in -invece e tutto funziona bene ora. Questa risposta mi ha aiutato ad arrivare fino in fondo. Penso che il problema fosse che avevo un limite debole che si stava mettendo in mezzo, forse in qualche modo scavalcando il limite duro. Comunque, -invece di hardripararlo per me.
Richard Wiseman,

1

Usare renicesenza sudosarebbe impossibile. Cito dalla renice(1)pagina man:

Gli utenti diversi dal superutente possono solo modificare la priorità dei processi di loro proprietà e possono solo aumentare monotonicamente il loro `` buon valore '' (per motivi di sicurezza) nell'intervallo da 0 a PRIO_MAX (20), a meno che un limite di risorse non sia set (Linux 2.6.12 e versioni successive).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.