Executando chdir antes de iniciar o serviço systemd

148

Pergunta: Posso iniciar um processo com systemd e atribuir a esse processo um diretório de trabalho de minha escolha?

Eu tenho um serviço que eu quero começar systemd. Quando esse serviço estiver sendo iniciado, desejo poder atribuir a ele um diretório de trabalho atual. Eu sei como fazer isso se estivesse usando init, mas estou tendo problemas systemd.

Aqui está o que eu tenho tentado trabalhar.

Meu serviço

Eu criei um utilitário simples ("listdir"), escrito em Python, e colocado em /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

Meu arquivo de configuração

Eu criei um listdir.servicearquivo para systemde coloquei aqui /lib/systemd/system/listdir.service::

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

Problema

Quando executo systemctl start listdirmeu log do sistema, o diretório raiz ("/") é registrado como o diretório de trabalho atual. Obviamente, eu esperava /usr/localo diretório atual, pois pensei ExecStartPreem mudar de diretório antes de iniciar o processo.

Obviamente, estou imaginando que systemdfuncionaria algo como um script de shell (mesmo sabendo que não é um script de shell). Alguém pode me dar uma idéia do que devo fazer? É possível definir um diretório de trabalho usando systemd? Obrigado!


Editar: o log do meu sistema está relatando um erro. (Acabei de perceber.)

Executable path is not absolute, ignoring: chdir /usr/local 

Portanto, chdiré um comando shell, e não um executável em si. OK. Mas ainda há alguma maneira de alterar os diretórios usando systemd?

Mario
fonte

Respostas:

270

No systemd> = 227, você deve poder usar:

[Service]
WorkingDirectory=/usr/local

para executar seu script lá.

( DOCS )

Eric Renouf
fonte
4
Como você encontrou isso? Não é mencionado em nenhum lugar da documentação !
Jameshfisher
2
@jameshfisher está nesta parte da documentação #
Eric Renouf
3
@EricRenouf aha, eles devem apenas duplicar essas opções compartilhadas na documentação do serviço
jameshfisher
3
Então, apenas por uma questão de clareza, isso seria indicado na [Service]seção?
Dthor 20/12/16
4
Respondendo a mim mesmo, funcionou no último CentOS 7, apesar da versão.
BrunoJCM 29/08/19