systemd单元文件里的WorkingDirectory ExecStart解释
WorkingDirectory含义
在 xx.service 的 [Service] 段里,
1 | [Service] |
它的意思是:
- 在启动
ExecStart前,把进程的当前工作目录 (cwd) 切换到这里。 - 这样,服务里执行的相对路径命令、日志文件、配置文件等,都会以该目录为基准。
等效于在启动命令前加了:
1 | cd /data/monitor && <ExecStart command> |
使用场景
程序依赖相对路径
- 比如
ExecStart=./bin/myapp,如果没有WorkingDirectory,systemd 默认工作目录是/,就会报错。 - 加上
WorkingDirectory=/data/myapp后,就能正常运行。
- 比如
ExecStart 第一个参数必须是绝对路径
日志/文件输出
- 程序写日志到
./logs/app.log,有了WorkingDirectory=/var/log/myapp,日志就会正确落在该目录下。
- 程序写日志到
隔离运行环境
- 保证程序不在
/下乱写文件,规范化目录。
- 保证程序不在
默认值
如果不写 WorkingDirectory,systemd 启动进程时的工作目录就是 /。
这就会导致:
- 进程使用相对路径时找不到文件
- 日志输出位置不对
生产配置例子
1 | [Unit] |
这样:
- 进程工作目录在
/data/monitor/prometheus --storage.tsdb.path=data/实际写入/data/monitor/prometheus/data- 日志输出
./xxx.log时也会落在该目录下
systemd 提示:ExecStart 的可执行路径必须是绝对路径,否则会忽略。