Смущает записи 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, мог его использовать?

  • Означает ли systemd все уровни выполнения?
  • Как начать x11vnc через сокет (т. Е. Только при необходимости)
  • Как направить вывод журнала определенных единиц в определенный файл?
  • Как приостановить работу с Gnome3 с помощью systemd
  • Что такое параметр для "systemctl list-units"
  • Зачем добавлять круглые скобки вокруг имени процесса?
  • Systemd: входной канал для демонаризованного сервера?
  • Модуль iptables не загружен после обновления Ubuntu с 14.04 по 16.04
  • 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 

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

    Linux и Unix - лучшая ОС в мире.