Назад | Перейти на главную страницу

Systemd останавливает / отключает все шаблонные службы, которые не соответствуют переменной

Как я могу программно остановить / отключить все шаблонные службы systemd, которые не соответствуют определенной переменной? Например, я бегу myservice@v1 и я хочу остановить / отключить службы, соответствующие myservice@* Кроме для myservice@v1.

Я подошел ближе всего, но list-units дает вывод, который явно не предназначен для анализа машиной, что делает его хрупким:

export SERVICES="$(systemctl list-units myservice@* --all | \
                   grep myservice | grep -v "@v1" | cut -f1 -d' ')"
if [ -n "$SERVICES" ]; then 
  /bin/systemctl stop $SERVICES
  /bin/systemctl disable $SERVICES
fi

Добавить --no-legend к systemctl команда, чтобы вырезать ненужный мусор, который вам не нужен. Затем будут перечислены только единицы без верхнего или нижнего колонтитула.

Я также предлагаю вам подтянуть свои grep. В его нынешнем виде он будет соответствовать v10 так же как v1, например. Вы можете сделать это, добавив -w для совпадения слов или более конкретным сопоставлением, например на @v1.service