Как я могу программно остановить / отключить все шаблонные службы 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