/sys/…/energy_uj에 대한 시스템 서비스 액세스를 허용합니다. 소유자를 변경하는 udev 규칙이 효과가 없습니까?

/sys/…/energy_uj에 대한 시스템 서비스 액세스를 허용합니다. 소유자를 변경하는 udev 규칙이 효과가 없습니까?

나는 루트가 아닌 systemd 서비스로 실행되는 scaphandre 또는 prometheus_node_exporter를 통해 일부 "일반" Linux 상자(예: VM과 같은 고급 장치나 K8은 말할 것도 없고)에서 내 CPU 전력 사용량을 수집하고 싶습니다.

문제: /sys/…/energy_uj커널 모듈에 의해 노출된 것은 intel_rapl_common기본적으로 루트 및 모드 0400이 소유합니다.

나의 첫 번째 접근 방식은

ExecStartPre=-+/usr/bin/modprobe intel_rapl_common
ExecStartPre=+/usr/bin/find /sys/devices/virtual/powercap -name energy_uj -exec chmod g+r -R {} + -exec chown root:powercap {} +
DynamicUser=yes
Group=powercap

이것이 작동하는 동안(systemd는 chmod에서 사용할 수 있는 이 서비스 파일의 존재를 기반으로 임시(기본) 그룹을 "생성"하는 것으로 보입니다) 더 깔끔한 접근 방식을 원합니다.

그래서 그룹을 만들고 커널 모듈을 자동으로 로드하기 /usr/lib/sysusers.d/위해 필요한 항목을 에 만들고 udev 규칙도 추가했습니다./usr/lib/modules-load.d/powercap

ENV{SUBSYSTEM}=="powercap", ACTION=="add|change", MODE="0440", OWNER="root", GROUP="powercap"

하지만 이 규칙은 아무런 효과가 없는 것으로 보이며, 관련된 모든 폴더의 권한과 소유자는 이전과 같습니다. 그러나 다음과 같은 이유로 규칙이 올바르게 적용된 것 같습니다.

ENV{SUBSYSTEM}=="powercap", ACTION=="add|change", OWNER="root", PROGRAM+="/usr/bin/find /sys$env{DEVPATH} -name energy_uj -exec chmod g+r -R {} + -exec chown root:powercap {} +"

그 규칙은 작동합니다. 하지만 원래 systemd/ExecStartPre 기반 솔루션으로 회귀한 것 같습니다.

죄송합니다. 두 가지 질문을 하나로 묶어서 묻고 있습니다.

  • PROGRAM권한 및 소유권을 변경 하지 않고 "깨끗한" udev 규칙을 만드는 방법이 있습니까 ?
  • 아니면 읽기 권한을 얻는 또 다른 유사한 "깨끗한" 방법이 있습니까?

관련 정보