Как сменить пользователя для набора служебных файлов systemd?

У вас есть export worker01="sdg sdh sdi sdj sdk", затем вы заменяете =пробелом, чтобы получить export worker01 "sdg sdh sdi sdj sdk". Поля, разделенные пробелами: export, worker01, "sdg, sdhи т. д.

Наверное, лучше разделить на =и убрать кавычки, чтобы была только оболочка:

$ while IFS== read -r key val ; do
    val=${val%\"}; val=${val#\"}; key=${key#export };
    echo "$key = $val";
  done < vars
worker01 = sdg sdh sdi sdj sdk
worker02 = sdg sdh sdi sdj sdm
worker03 = sdg sdh sdi sdj sdf

keyсодержит имя переменной, valзначение. Конечно, на самом деле это не анализирует ввод, а просто удаляет двойные кавычки, если они там есть.

4
11.01.2020, 21:54
2 ответа

Кто сказал, что нужно вообще файлы менять? ☺

find /etc/systemd/service/ -maxdepth 1 -name 'myapp.*.service' |
while read -r i
do
    printf '[Service]\nUser=%s\n' 'Bar' > ${i}.d/change-user.conf
done

Таким образом несколько проще получить определение ванильного сервиса.

rm -- /etc/systemd/service/myapp.*.service.d/change-user.conf

Сделать все это одним файлом , применимым ко всей группе сервисов, — это, конечно, простое упражнение по использованию жестких ссылок.

install -d /etc/systemd/temp
printf '[Service]\nUser=%s\n' 'Bar' > /etc/systemd/temp/change-user.conf
find /etc/systemd/service/ -maxdepth 1 -name 'myapp.*.service' |
while read -r i
do
    ln /etc/systemd/temp/change-user.conf ${i}.d/change-user.conf
done

Это, конечно, официальный способ сделать такого рода вещи с пакетом -, поставляемым и во время выполнения -, сгенерированными модулями, кроме того. Вы должны , а не изменять такие юнит-файлы.

Дополнительная литература

  • Леннарт Поттеринг (2013 -10 -07 ).systemd.unit. справочные страницы systemd. freedesktop.org.
5
27.01.2020, 20:48

с помощьюsed:

sed -i 's/^User=Foo$/User=Bar/' /etc/systemd/service/myapp.*.service
5
27.01.2020, 20:48

Теги

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