So führen Sie den Dienst aus, nachdem das Kernelmodul geladen wurde

So führen Sie den Dienst aus, nachdem das Kernelmodul geladen wurde

Ich habe mir in den letzten Stunden den Kopf darüber zerbrochen. Auf einem meiner Rechner intel-rapl-msrist der Treiber fehlerhaft und das Neuladen behebt das Problem. Ich dachte, ich könnte ganz einfach einen Dienst erstellen, der dies beim Booten tut. Aber ich kann den Dienst nicht laden, nachdem der Treiber geladen wurde.

[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

Wobei das Skript ExecStarteinfach Folgendes enthält:

rmmod intel_rapl_msr
modprobe intel_rapl_msr

Auf diese Weise schlägt der Dienst beim Booten mit der folgenden Meldung fehl:

mmod: ERROR: Module intel_rapl_msr is not currently loaded

Ist es also möglich, die Ausführung eines Dienstes zu erzwingen, nachdem dieses Kernelmodul geladen wurde?

Jede Hilfe ist willkommen!

Antwort1

Ich habe die Modulabhängigkeit des Dienstes gelöst, indem ich diese Module mit systemd-modules-load.service geladen habe.

In der Praxis: Fügen Sie die Module hinzu zu: /etc/modules-load.d/modules.conf

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

Antwort2

Also mache ich jetzt einfach eine Umfrage, lsmoddie funktioniert, aber irgendwie schmutzig ist:

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

verwandte Informationen