Передача переменных среды udev в выполнение службы systemd

Я мигрирую существующее правило udev, которое привязано к действию изменения блочного устройства и запускает данный сценарий.

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

в этой конфигурации udev передал переменные среды, связанные с аппаратным устройством, такие как ID_CDROM_MEDIA-0 и ID_FS_LABEL. С тех пор я обновил правило udev, чтобы использовать systemd для запуска службы при изменении оборудования.

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

служебный файл systemd:

[Unit]
Description=changes to dvd drive

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

[Install]
WantedBy=multi-user.target

на этом этапе служба запускается на события изменения но переменные среды, передаваемые командой RUN в udev, не передаются в выполнение службы.

можно ли передать среду из udev в среду выполнения systemd или мне нужно явно передать параметры?

6
задан Ben Campbell
02.03.2023 12:05 Количество просмотров материала 2765
Распечатать страницу

1 ответ

хотя я не нашел способ передать среду из udev в systemd, можно запросить базу данных udev для свойств среды. The udevadm info command и --query и --export параметры, которые позволяют запрашивать только свойства среды и печатать их в формате, который можно оценить.

я использовал комбинацию переменных экземпляра systemd и udevadm команды для инициализации переменных окружения.

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

это правило udev выполнит следующий служебный файл и передаст DEVNAME переменная как переменная экземпляра службы.

[Unit]
Description=changes to dvd drive

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

[Install]
WantedBy=multi-user.target

я использовал эту переменную экземпляра для оценки свойств среды элемента udev и решил свою проблему.

#!/bin/sh

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

 # The rest of the script that depends on the udev environment
 ...
2
отвечен Ben Campbell 2023-03-03 19:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх