systemd После того, как опция не работает

У меня есть следующий файл myweb.service

 [Unit] Description=myweb - A simple hello world program After=bluetooth.service [Service] Type=simple User=root ExecStart=/usr/bin/docker run -p 2222:4343 manikanth/webapp Restart=on-failure [Install] #WantedBy=multi-user.target того, как [Unit] Description=myweb - A simple hello world program After=bluetooth.service [Service] Type=simple User=root ExecStart=/usr/bin/docker run -p 2222:4343 manikanth/webapp Restart=on-failure [Install] #WantedBy=multi-user.target 

Я целенаправленно отключил bluetooth.service и проверил. Но услуга становится активной. Я думал, это может быть из-за WantedBy и поэтому я прокомментировал это. Проблема по-прежнему сохраняется

Каков правильный способ не поднимать службу, если зависимая служба, например, bluetooth.service не активна?

Вероятно, вы ищете параметр Requisite= вместе с опцией After= .

На странице руководства

Аналогично Requires =. Однако, если перечисленные здесь единицы не запущены, они не будут запущены, и транзакция будет немедленно сбой.

Requires= не работает в этом случае, потому что bluetooth.service будет запущен при запуске myweb.service . Requisite= не будет пытаться запустить bluetooth.service . Однако это покажет, что myweb.service не удалось.

Если я не ошибаюсь, вы хотите активировать myweb.service только если bluetooth.service в противном случае не запускает myweb.serbice . Если это правильно, прочитайте ниже ответ, иначе, пожалуйста, поправьте меня!

Вы действительно должны использовать Requires вместе с After . Использование After просто настраивает зависимости заказа между файлами устройства, но Requires будет гарантировать, что модуль с ошибкой не удастся, и это тоже не сработает. Итак, добавьте myweb.service Requires=bluetooth.service в myweb.service и systemctl daemon-reload