Como executar o serviço após o módulo do kernel ser carregado

Como executar o serviço após o módulo do kernel ser carregado

Estou quebrando a cabeça com isso nas últimas horas. Em uma das minhas máquinas, o intel-rapl-msrdriver está com erros e recarregá-lo resolve o problema. Achei que poderia criar trivialmente um serviço que fizesse isso na inicialização. Mas não consigo carregar o serviço depois que o driver foi carregado.

[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

Onde o script ExecStartsimplesmente contém:

rmmod intel_rapl_msr
modprobe intel_rapl_msr

Dessa forma, o serviço falha na inicialização com a mensagem:

mmod: ERROR: Module intel_rapl_msr is not currently loaded

Então, é possível forçar a execução de um serviço após o carregamento deste módulo do kernel?

Qualquer ajuda é apreciada!

Responder1

Resolvi a dependência de módulos do serviço. Estava começando a carregar esses módulos com systemd-modules-load.service

Na prática: adicione os módulos em: /etc/modules-load.d/modules.conf

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

Responder2

Então agora eu acabei de fazer uma enquete e lsmodfunciona, mas está meio sujo:

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

informação relacionada