Em systemd > = 227 você deve poder usar:
[Service]
WorkingDirectory=/usr/local
para que seu script seja executado lá.
( DOCS )
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.
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())
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
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
?
Em systemd > = 227 você deve poder usar:
[Service]
WorkingDirectory=/usr/local
para que seu script seja executado lá.
( DOCS )
Tags systemd