GNU/Linux >> Tutoriales Linux >  >> Linux

Desactivar un servicio systemd después del tiempo de inactividad

La activación de socket en systemd puede funcionar en dos modos:

  • Accept=true :systemd mantiene el socket de escucha, acepta todas las conexiones entrantes, genera un nuevo proceso para cada conexión y le pasa el socket establecido. Este caso es trivial (cada proceso sale cuando termina).
  • Accept=false :systemd crea el socket de escucha y lo observa para la conexión entrante. Tan pronto como entra uno, systemd genera el servicio y le pasa el conector de escucha. A continuación, el servicio acepta la conexión entrante y las posteriores. Systemd ya no rastrea lo que sucede en el socket, por lo que no puede detectar la inactividad.

En este último caso, creo que la única solución verdaderamente limpia es modificar la aplicación para que se cierre cuando esté inactiva durante algún tiempo. Si no puede hacer eso, una solución rudimentaria podría ser configurar cron o un temporizador systemd para eliminar el servicio una vez por hora. Esta podría ser una aproximación razonable si el servicio solo se genera con poca frecuencia.

Tenga en cuenta que el caso de uso es probablemente bastante raro. Un proceso sentado en poll()/select() esperando una conexión no consume tiempo de CPU, por lo que el único recurso que se usa en esa situación es la memoria. Probablemente sea más fácil y más eficiente configurar un intercambio y dejar que el kernel decida si vale la pena mantener el proceso en la RAM todo el tiempo o no.


Linux
  1. Agregar un nuevo servicio a Linux systemd

  2. Centos:¿Systemd elimina el servicio inmediatamente después del inicio?

  3. Linux – ¿Ubicación del script Fsck?

  4. Systemd:Uso de After y Requires

  5. systemd - Dando a mi servicio múltiples argumentos

Administrar el inicio usando systemd

Comandos Systemctl para administrar el servicio Systemd

Uso de las funciones de systemd para proteger los servicios

Administrar cgroups con systemd

En el archivo de servicio systemd, ¿cómo digo después de que el USB esté listo?

activación de socket systemd frente a xinetd