Как запустить службу после загрузки модуля ядра

Как запустить службу после загрузки модуля ядра

Я ломал голову над этим последние несколько часов. На одной из моих машин драйвер intel-rapl-msrглючит, и его перезагрузка решает проблему. Я думал, что смогу тривиально создать службу, которая делает это при загрузке. Но я не могу заставить службу загрузиться после загрузки драйвера.

[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

Где скрипт ExecStartпросто содержит:

rmmod intel_rapl_msr
modprobe intel_rapl_msr

В этом случае служба даст сбой при загрузке с сообщением:

mmod: ERROR: Module intel_rapl_msr is not currently loaded

Так возможно ли принудительно запустить службу после загрузки этого модуля ядра?

Любая помощь приветствуется!

решение1

Я решил проблему зависимости модулей сервиса, начав загрузку этих модулей с помощью systemd-modules-load.service

На практике: добавьте модули в: /etc/modules-load.d/modules.conf

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

решение2

Так что теперь я просто провожу опрос, lsmodон работает, но выглядит немного грязно:

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

Связанный контент