Me he estado rompiendo la cabeza por esto las últimas horas. En una de mis máquinas, el intel-rapl-msr
controlador 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 ExecStart
simplemente 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 lsmod
funciona, 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