Cómo ejecutar el servicio después de cargar el módulo del kernel

Cómo ejecutar el servicio después de cargar el módulo del kernel

Me he estado rompiendo la cabeza por esto las últimas horas. En una de mis máquinas, el intel-rapl-msrcontrolador tiene errores y volver a cargarlo soluciona el problema. Pensé que podría crear trivialmente un servicio que hiciera esto al arrancar. Pero no puedo cargar el servicio después de que se haya cargado el controlador.

[Unit]
Description=Reload intel-rapl-msr
Requires=systemd-modules-load.target
WantedBy=multi-user.target

ExecStart=/nix/store/wqjkhyyffqdbx767vlqklzi12ln8j3pv-unit-script-cpu-script-start/bin/cpu-script-start

Donde el script ExecStartsimplemente contiene:

rmmod intel_rapl_msr
modprobe intel_rapl_msr

De esta manera el servicio falla al arrancar con el mensaje:

mmod: ERROR: Module intel_rapl_msr is not currently loaded

Entonces, ¿es posible forzar la ejecución de un servicio después de cargar este módulo del kernel?

¡Cualquier ayuda es apreciada!

Respuesta1

Resolví la dependencia de los módulos del servicio. Estaba comenzando a cargar estos módulos con systemd-modules-load.service.

En la práctica: agregue los módulos a: /etc/modules-load.d/modules.conf

https://www.freedesktop.org/software/systemd/man/modules-load.d.html#

Respuesta2

Así que ahora solo hago una encuesta que lsmodfunciona, pero está un poco sucio:

while ! lsmod | grep -q intel_rapl_msr;
do
  echo "intel_rapl_msr not loaded yet... sleeping for 5 seconds"
  sleep 5
done
echo "found intel_rapl_msr"
rmmod intel_rapl_msr
modprobe intel_rapl_msr

información relacionada