Как препятствовать тому, чтобы systemd запустил сервисы, которые имеют RequriedBy на конкретном сервисе и/или цели

Я пытаюсь записать простой сервис, который просто проверяет, подключено ли 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

1
задан 23 April 2020 в 01:33

1 ответ

"[Я] sn't инструкция RequiredBy, которая, как предполагают, препятствовала тому, чтобы сервисы запустились, если сервис, который имеет эту зависимость, не запускается?"

Нет, это наоборот.

Ваш сервис говорит, что это, требует, чтобы те цели были в порядке, прежде чем эта услуга сможет работать.

Это - список зависимостей, не список обратных зависимостей.

  • ПРИМЕР:

    Сервис C требует, чтобы A и B запустились, прежде чем C сможет работать:

    RequiredBy=A.target,B.target
    

    Если сбои, то C не будет работать.

0
ответ дан 25 April 2020 в 10:42

Другие вопросы по тегам:

Похожие вопросы: