Я пытаюсь записать простой сервис, который просто проверяет, подключено ли USB-устройство. Ниже, содержание файла единицы для сервиса:
cat /etc/systemd/system/check-usb.service
[Unit]
Description=Check USB storage
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c 'cat /sys/kernel/debug/usb/devices | grep -o "ProdID=5567"'
Before=multi-user.target
[Install]
RequiredBy=multi-user.target, graphical.target
Я знаю, что могли бы быть лучшие способы проверить это, но это - первое решение, которое появилось в моей голове. Мое целевое поведение было бы: 1. USB с тем идентификатором соединен, начальная загрузка обычно 2. USB с тем идентификатором не найден, сервис будет в отказавшем состоянии, и я не хочу сервисов, загружаемых выше emergency.target (я хочу, чтобы это запустилось в однопользовательском режиме),
Мой беспорядок запускается с того, что, даже если эта услуга работает или нет, система будет всегда загружать все необходимые услуги и начальную загрузку в графический режим. Если я проверяю состояние, как ниже, я вижу, что graphical.target кажется неактивным:
systemctl list-units --type=target --state=inactive
UNIT LOAD ACTIVE SUB DESCRIPTION
● all.target not-found inactive dead all.target
emergency.target loaded inactive dead Emergency Mode
getty-pre.target loaded inactive dead Login Prompts (Pre)
graphical.target loaded inactive dead Graphical Interface
multi-user.target loaded inactive dead Multi-User System
network-pre.target loaded inactive dead Network (Pre)
rescue.target loaded inactive dead Rescue Mode
shutdown.target loaded inactive dead Shutdown
umount.target loaded inactive dead Unmount All Filesystems
Если я перечисляю зависимости graphical.target, я вижу, что моя служба поддержки находится в отказавшем состоянии, но все другие сервисы в порядке. Мой вопрос, Разве инструкция RequiredBy, как предполагается, не препятствует тому, чтобы сервисы запустились, если сервис, который имеет эту зависимость, не запускается? Что я должен сделать для выполнения моего желаемого поведения?
Я приношу извинения, неясно ли что-то и сообщите мне раз так. Я использую человечность 18.04.4 на виртуальной машине для тестирования:
cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
Спасибо, и сообщите мне, требуется ли больше деталей. Я пытался искать systemd документацию и бесчисленные форумы, но я не нашел ответ, таким образом, я отправляю здесь.
Заранее спасибо, George
"[Я] sn't инструкция RequiredBy, которая, как предполагают, препятствовала тому, чтобы сервисы запустились, если сервис, который имеет эту зависимость, не запускается?"
Нет, это наоборот.
Ваш сервис говорит, что это, требует, чтобы те цели были в порядке, прежде чем эта услуга сможет работать.
Это - список зависимостей, не список обратных зависимостей.
ПРИМЕР:
Сервис C требует, чтобы A и B запустились, прежде чем C сможет работать:
RequiredBy=A.target,B.target
Если сбои, то C не будет работать.