Uudev ortam değişkenlerini sistemd servis çalıştırmasına geçirme


5

Bir blok aygıtının değişiklik eylemine bağlı olan ve belirli bir komut dosyasını çalıştıran varolan bir udev kuralını geçiriyorum.

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", RUN+="/usr/local/bin/script"

Bu yapılandırmada udev, ID_CDROM_MEDIA-0ve gibi donanım aygıtıyla ilişkili ortam değişkenlerini geçti ID_FS_LABEL. O zamandan beri udev kuralını donanım değişikliği konusunda bir hizmet başlatmak için systemd kullanacak şekilde güncelledim.

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", TAG+="systemd", ENV{SYSTEMD_WANTS}=="drive-change.service"

Systemd servis dosyası:

[Unit]
Description=changes to dvd drive

[Service]
Type=oneshot
ExecStart=/usr/local/bin/script

[Install]
WantedBy=multi-user.target

Bu noktada servis değişiklik olaylarında çalıştırılır, ancak udev'deki RUN komutu tarafından iletilen ortam değişkenleri hizmetin yürütülmesine geçilmez.

Ortamı udev'den sistemd'in yürütme ortamına geçirmek mümkün mü yoksa açıkça parametreleri geçmem gerekiyor mu?

Yanıtlar:


5

Ortamı udev'den sisteme geçirmenin bir yolunu bulamadığım halde udev veritabanını ortam özellikleri için sorgulamak mümkün. udevadm info Komut hem sahiptir --queryve --exportyalnızca ortam özellikleri için sorgulamak ve değerlendirilebilir bir biçimde bunları yazdırmak için izin parametreleri.

udevadmOrtam değişkenlerini başlatmak için sistemd örneği değişkenleri ve komutların bir kombinasyonunu kullandım .

SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sr0", ACTION=="change", TAG+="systemd", ENV{SYSTEMD_WANTS}=="drive-change@%E{DEVNAME}.service"

Bu udev kuralı aşağıdaki servis dosyasını yürütür ve DEVNAMEdeğişkeni servisle birlikte bir örnek değişken olarak iletir.

[Unit]
Description=changes to dvd drive

[Service]
Type=oneshot
ExecStart=/usr/local/bin/script %I

[Install]
WantedBy=multi-user.target

Bu örnek değişkenini udev öğesinin ortam özelliklerini değerlendirmek için kullandım ve sorunumu çözdüm.

#!/bin/sh

# Systemd passes the DEVNAME as the first parameter to the script
eval $(udevadm info --query=env --export $1)

 # The rest of the script that depends on the udev environment
 ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.