在启动 systemd 服务之前执行 chdir

在启动 systemd 服务之前执行 chdir

问题:我可以使用 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

让你的脚本在那里执行。

(文档管理系统

相关内容