¿Cómo puedo permitir que un usuario dé prioridad a un proceso con simpatía negativa?

12

Quiero que un usuario ejecute un proceso específico en el sistema con un buen valor negativo. No puedo simplemente bifurcar el proceso a un segundo plano, ya que este programa específico es un servidor de Minecraft y confío en la línea de comando para controlar el servidor.

Mi script bash actual se ve así (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    

sleepsimplemente retrasa la ejecución de renice. renicese utiliza pspara verificar si hay un proceso de Java utilizando la identificación propia del usuario. Puede haber otras instancias de desove de Java bajo diferentes usuarios, pero el servidor de Minecraft se ejecuta bajo su propio usuario Minecraft .

Obviamente no quiero ingresar una contraseña cada vez que inicio el servidor.
de / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

¿Hay alguna forma más elegante de hacer esto? Simplemente usar niceno es una opción, sudo nice bashen combinación con NOPASSWD: la opción sería un gran problema de seguridad.

Baarn
fuente

Respuestas:

9

El módulo pam_limits.so puede ayudarlo allí.

Le permite establecer ciertos límites en usuarios y grupos individuales específicos o comodines o rangos de usuarios y grupos.

Los límites que puede establecer suelen ser configuraciones de ulimit, pero también en la cantidad de sesiones de inicio de sesión concurrentes, procesos, tiempo de CPU, prioridad predeterminada y prioridad máxima (cambio). Consulte la página de manual de limit.conf para obtener más información.

Por ejemplo, puede configurar su grupo de mindcraft para que todos sus procesos se inicien con una mayor prioridad predeterminada y puede permitirles usar los comandos nice y renice para aumentar manualmente la prioridad de sus trabajos importantes en lugar de solo reducir la prioridad.

# /etc/security/limits.conf
# increase default and max prio for members of the mindcraft group
@mindcraft   hard priority -10
@mindcraft   hard nice     -18   
HBruijn
fuente
44
Establecer solo el límite duro para niceno parece hacerlo, tuve que establecer ambos, usando -.
Baarn
No parece funcionar para mí en Ubuntu 16.04. He establecido priorityen -10 y nice-15 y siempre obtengo "permiso denegado" incluso cuando trato de usar "nice -n -2" en algo. ¿Tengo que reiniciar? Acabo de cerrar sesión y de nuevo según este consejo .
Richard Wiseman
Actualización en mi publicación anterior ... Desde el reinicio descubrí que la priorityconfiguración tiene efecto, pero la niceconfiguración solo me permite reducir la prioridad. Cuando comienzo algo con la prioridad predeterminada, ahora es -10. Puedo hacer reniceel proceso a -9 pero luego no puedo renicevolver a -10.
Richard Wiseman
Actualización 2: ¡Lo he resuelto! Estaba usando hardeso causó los problemas. En su -lugar, lo cambié y todo funciona bien ahora. Esta respuesta me ayudó a llegar al fondo. Creo que el problema era que tenía un límite blando que se estaba interponiendo en el camino, tal vez anulando el límite duro de alguna manera. De todos modos, en -lugar de hardarreglarlo para mí.
Richard Wiseman
1

Usar renicesin sudosería imposible. Cito de la renice(1)página del manual:

Los usuarios que no sean el superusuario solo pueden alterar la prioridad de los procesos que poseen, y solo pueden aumentar monotónicamente su `` buen valor '' (por razones de seguridad) dentro del rango de 0 a PRIO_MAX (20), a menos que se establezca un límite de recursos agradable. conjunto (Linux 2.6.12 y superior).

Joseph R.
fuente