¿Los procesos en cgroups tienen que configurarse en cada arranque? Si es así, ¿cómo persistirlos?

9

Estaba leyendo esta respuesta a una pregunta sobre cómo establecer límites para los procesos mediante el uso de cgroups. La muestra dada establece límites para un proceso (en el ejemplo sshd). En la respuesta, el PID del proceso se establece manualmente. Esto sería inaceptable para mis propósitos, me gustaría que los procesos iniciados desde una aplicación dada siempre tengan los límites establecidos, sin importar cuándo se inicien o no estén limitados por cuántos procesos se inician.

Tal vez no está claro en el ejemplo cómo sucedería eso, por lo que una explicación clara o un enlace a uno también sería bienvenida. El ejemplo en el kernel cgroups.txt parece usar el mismo modelo que ya se dio anteriormente .

casualunixer
fuente

Respuestas:

6

La forma más fácil es usar lo systemdque puede ser responsable de su de sshdtodos modos (dependiendo de la distribución). Puede configurar fácilmente los límites en el sshdarchivo de la unidad. systemdpone todos los servicios en cgroups separados de todos modos.

Sin systemdla solución más fácil, es probable que se modifique el sshdscript de inicio (tenga en cuenta que no se sobrescribe con una actualización; puede ser una buena idea copiarlo con un nombre diferente y desactivar el script original).

Hauke ​​Laging
fuente
Hay una aplicación problemática que los límites serían excelentes para limpiar, eso no es sshd. Es solo que sshd se usó en el ejemplo. Presumiblemente, puede aplicar cgroups a cualquier proceso. Un script podría terminar siendo la solución más fácil. Sin embargo, parecía que cgroups habría sido una buena respuesta.
casualunixer
@casualunixer Solo tiene que escribir un archivo de unidad para su aplicación. Puede configurarlo para que se inicie automáticamente en el arranque o solo manualmente.
Hauke ​​Laging
@laging, si pudiera dar un archivo de unidad de ejemplo en una respuesta, o un puntero para la documentación a uno similar, sería apreciado.
casualunixer
@casualunixer Es exactamente donde uno lo esperaría: man systemdlleva a man 5 systemd.unitlleva a man 5 systemd.service. En mi sistema, el archivo SSH es /usr/lib/systemd/system/sshd.service.
Hauke ​​Laging
Ah, dado que no tengo instalado systemd, aunque ese es el tema de esta respuesta, no fue inmediatamente obvio.
casualunixer