在启动systemd服务之前执行chdir


148

问题:我可以使用systemd启动一个进程并为该进程分配我选择的工作目录吗?

我要开始提供一项服务systemd。启动该服务时,我希望能够为其分配一个当前的工作目录。如果我使用的话我知道怎么做init,但是我遇到了麻烦systemd

这就是我一直在努力的工作。

我的服务

我创建了一个简单的实用程序(“ listdir”),用Python编写,并放置在/opt/bin/listdir

#! /usr/bin/python

import os

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

我的配置文件

然后,我为创建了一个listdir.service文件systemd并将其放在这里/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

问题

运行systemctl start listdir系统日志时,将根目录(“ /”)记录为当前工作目录。当然,我希望将其/usr/local作为当前目录,因为我认为ExecStartPre在启动该过程之前会更改目录。

显然,我在systemd想这会像Shell脚本一样工作(即使我知道它不是Shell脚本)。有人可以告诉我应该怎么做吗?甚至可以使用设置工作目录systemd吗?谢谢!


编辑:我的系统日志报告错误。(我刚刚注意到。)

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

因此,它chdir是一个shell命令,而不是可执行文件本身。好的。但是我还有什么方法可以使用更改目录systemd吗?

Answers:


270

在systemd> = 227上,您应该可以使用:

[Service]
WorkingDirectory=/usr/local

让您的脚本在那里执行。

DOCS


4
您是怎么找到这个的?在文档的任何地方都没有提到它!
jameshfisher

2
@jameshfisher它在文档的此部分中
Eric Renouf

3
@EricRenouf啊哈,他们应该只复制服务文档中的共享选项
jameshfisher 16-10-18

3
因此,为清楚起见,这将在本[Service]节中介绍吗?
dthor

4
我自己回答说,尽管有版本,它仍可在最新的CentOS 7上运行。
BrunoJCM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.