Смущает записи ExecStartPre в файле systemd unit

У меня есть служба systemd, которая должна создавать каталог в /run , но в противном случае выполняется как пользователь без полномочий root. Из примера блога я получил следующее решение:

 [Unit] Description=Startup Thing [Service] Type=oneshot ExecStart=/usr/bin/python3 -u /opt/thing/doStartup WorkingDirectory=/opt/thing StandardOutput=journal User=thingUser # Make sure the /run/thing directory exists PermissionsStartOnly=true ExecStartPre=-/bin/mkdir -p /run/thing ExecStartPre=/bin/chmod -R 777 /run/thing [Install] WantedBy=multi-user.target 

Магия находится в 3 строках, следующих за комментарием. По-видимому, ExecStartPre будет запускаться как root таким образом, но ExecStart будет работать как указанный пользователь.

Это привело к 3-мя вопросам:

  1. Что делает перед do /bin/mkdir ? Я не знаю, почему он там или что он делает.
  2. Когда в файле unit имеется несколько ExecStartPre , они запускаются серийно в том порядке, в котором они находятся в файле устройства? Или какой-то другой метод?
  3. Является ли это на самом деле лучшим методом для достижения моей цели создания созданного каталога запуска, чтобы пользователь, не являющийся пользователем root, мог его использовать?

One Solution collect form web for “Смущает записи ExecStartPre в файле systemd unit”

По любым вопросам, касающимся директив systemd, вы можете использовать man systemd.directives для поиска справочной страницы, которая документирует директиву. В случае ExecStartPre= вы найдете его документированным в man systemd.service .

В документах для ExecStartPre= вы найдете объяснение, что ведущий «-» используется для ExecStartPre= , что для этих команд допускается отказ. В этом случае допускается, если /run/thing уже существует.

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

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

  ExecStartPre=-/bin/chown thingUser /run/thing ExecStartPre=-/bin/chmod 700 /run/thing 

Это делает каталог принадлежащим и полностью доступным для определенного пользователя.

  • Как настроено «offline-updates» systemd на сервере Debian?
  • OpenSuse 12.3 сохраняет переименование сетевых интерфейсов?
  • Как запустить службу пользователя systemd для запуска сна (например, suspend, hibernate)?
  • таймер systemd OnUnitActiveSec vs OnCalendar для замены anacron
  • Как создать файл systemd для установки тома при загрузке?
  • перехватывать лучшие практики с помощью systemd
  • Устранение неполадок сообщения об ошибке «противоречит существующим заданиям» systemd
  • Есть ли способ разработки сценариев выскочки на Fedora 21?
  • Какие команды устарели от systemd
  • поддержка systemd для переключения взаимоисключающих сервисов?
  • Где поставить сокет так, что PrivateTmp может быть правдой
  • Как я могу предотвратить перезагрузку systemctl или выключение системы systemctl?
  • Linux и Unix - лучшая ОС в мире.