Рейтинг:0

Проверьте в ExecStartPre, существует ли двоичный файл bash.

флаг it

Я хочу, чтобы моя служба запускалась, только если другая служба не активна. Для этого, как поясняется в этот другой вопрос, Я собираюсь сделать:

ExecStartPre=/bin/bash -xc '/usr/bin/systemctl is-active --quiet other-unit.service && exit 1 || выход 0'

Однако существует небольшая вероятность того, что ОС не включает /bin/bash. В этом случае я бы хотел, чтобы служба все равно запускалась. Я пытался добиться этого, используя:

ExecStartPre=какой bash 2>/dev/null && /usr/bin/bash -xc '/usr/bin/systemctl включен --quiet nm-cloud-setup.service && exit 1 || выход 0' || выход 0

Но systemd жалуется:

который[1122772]: /usr/bin/который: неверный параметр -- 'x'
который[1122772]: /usr/bin/который: неверный параметр -- 'c'
который[1122772]: /usr/bin/который: нет && в (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)

Я предполагаю, что ExecStartPre= весьма ограничен. Возможно ли добиться того, что я хочу?

Michael Hampton avatar
флаг cz
Почему вы вызываете bash вместо /bin/sh?
mosquetero avatar
флаг it
Я вставил ответ на другой вопрос. Если я перейду на /usr/bin/sh, могу ли я быть уверен, что он будет частью всей ОС?
Michael Hampton avatar
флаг cz
Я сказал `/bin/sh`, а не `/usr/bin/sh`. Первый существует буквально во всем, что смутно похоже на Unix за последние 50 лет. Это даже на вашем телефоне. О последнем я ничего не говорил и не стал бы на него рассчитывать.
mosquetero avatar
флаг it
хорошо. В этом случае мне не нужно проверять, доступен ли `/bin/sh`, спасибо. Не могли бы вы написать это как ответ, чтобы я мог пометить вопрос как отвеченный, пожалуйста?
Michael Hampton avatar
флаг cz
ХОРОШО. Но просто из любопытства я хотел бы знать, какая система включает systemd, но не bash.
mosquetero avatar
флаг it
Я просто хотел охватить все возможные случаи. Я видел одну ОС Alpine, использующую systemd, потому что пользователь каким-то образом установил ее.
Рейтинг:1
флаг cz

Вместо того, чтобы вызывать bash, вам следует подумать о вызове оболочки Bourne. /бин/ш который существует практически с самого начала Unix и существует буквально во всем, что похоже на Unix, вплоть до вашего телефона. (Хотя в современных системах он обычно заменяется более мощной оболочкой, которая работает в режиме совместимости с оболочкой Bourne при вызове как /бин/ш.)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.