问题:我可以使用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来更改目录吗?

#1 楼

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

[Service]
WorkingDirectory=/usr/local


使脚本在此处执行。

(DOCS)

评论


您是怎么找到这个的?文档中未提及任何地方!

–jameshfisher
16-10-17在15:33

@jameshfisher在文档的此部分中

–埃里克·雷诺夫(Eric Renouf)
16-10-17在15:36

@EricRenouf啊哈,他们应该只复制服务文档中的那些共享选项

–jameshfisher
16-10-18在10:52

因此,为清楚起见,这是否会出现在[Service]部分中?

–dthor
16/12/20在1:32



我自己回答说,尽管有版本,它仍可在最新的CentOS 7上运行。

– BrunoJCM
17年8月29日在20:30