Executando chdir antes de iniciar o serviço systemd

125

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

Eu tenho um serviço que quero começar com systemd . Quando esse serviço está sendo iniciado, desejo poder atribuí-lo a um diretório de trabalho atual. Eu sei como fazer isso se eu estivesse usando init , mas estou tendo problemas com 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 arquivo listdir.service para systemd e o 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 listdir , meu log do sistema registra o diretório raiz ("/") como o diretório de trabalho atual. Obviamente, eu esperava /usr/local como o diretório atual, pois achei que ExecStartPre mudaria de diretórios antes de iniciar o processo.

Obviamente, estou imaginando que systemd funcionaria como um shell script (mesmo sabendo que não é um shell script). Alguém pode me dar uma ideia do que eu deveria estar fazendo? É possível definir um diretório de trabalho usando systemd ? Obrigado!

Edit: Meu log do sistema está relatando um erro. (Eu acabei de notar.)

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 ?

    
por Mario 05.05.2015 / 22:08

1 resposta

218

Em systemd > = 227 você deve poder usar:

[Service]
WorkingDirectory=/usr/local

para que seu script seja executado lá.

( DOCS )

    
por 05.05.2015 / 22:13

Tags