我有一个我想从
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