Confuso por entradas ExecStartPre no arquivo de unidade do systemd

17

Eu tenho um serviço systemd que precisa criar um diretório em /run , mas, caso contrário, é executado como um usuário não raiz. De um exemplo de blog, obtive a seguinte solução:

[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

A mágica está nas 3 linhas que seguem o comentário. Aparentemente, o ExecStartPre será executado como root dessa forma, mas o ExecStart será executado como o usuário especificado.

Isso levou a três perguntas:

  1. O que o - faz na frente do /bin/mkdir ? Eu não sei porque está lá ou o que faz.
  2. Quando há vários ExecStartPre em um arquivo de unidade, eles são executados serialmente na ordem em que são encontrados no arquivo da unidade? Ou algum outro método?
  3. Esta é realmente a melhor técnica para atingir meu objetivo de obter o diretório de execução criado para que o usuário não-root possa usá-lo?
por Travis Griggs 01.03.2017 / 18:53

1 resposta

22

Para qualquer dúvida sobre as diretivas systemd, você pode usar man systemd.directives para procurar a página man que documenta a diretiva. No caso de ExecStartPre= , você encontrará documentado em man systemd.service .

Em docs para ExecStartPre= , você encontrará explicado que o "-" inicial é usado para observar que a falha é tolerada para esses comandos. Nesse caso, é tolerado se /run/thing já existir.

Os documentos lá também explicam que "múltiplas linhas de comando são permitidas e os comandos são executados um após o outro, em série."

Uma melhoria em seu método de pré-criar o diretório não é torná-lo gravável quando você precisa apenas gravá-lo por um usuário específico. Permissões mais limitadas seriam obtidas com:

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

Isso torna o diretório de propriedade de e totalmente acessível a partir de um usuário específico.

    
por 01.03.2017 / 19:19

Tags