我正在尝试使用$HOME
中的环境变量ExecStart
。我尝试了很多不同的方法,例如$HOME
和${HOME}
但似乎都没有用
ExecStart=${HOME}/bin/some-binary
有人知道这个的正确格式吗?
答案1
我想这就是你要找的东西:https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers。
具体来说,%h
应该扩展到当前用户的主目录。
答案2
受支持的变量的完整列表(称为“说明符”)如下:https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers。
没有指定服务运行用户的主目录(由 指定的目录User=
)。运行服务管理器的用户只有一个主目录。
来自链接:
%h
是运行服务管理器的用户例如。对于系统管理员,这将解析为“/root
”。请注意,此设置是不是User=
受服务单元的[服务]部分中可配置的设置的影响。
答案3
因此,由于缺乏实际的例子和评论,让人感觉好像%h
不起作用(确实如此),这是一个从 HOME 目录启动且无需硬编码的服务的完整示例。
鉴于:
脚本
~/test.sh
:#!/bin/bash echo hello
服务文件
~/.config/systemd/user/test.service
:[Unit] Description=Test [Service] Type=oneshot ExecStart=%h/test.sh [Install] WantedBy=multi-user.target
然后执行systemctl --user daemon-reload && systemctl --user start test
将使其启动并打印hello
到日志。
它使用%h
其他答案中提到的说明符,并记录为This is the home directory of the user running the service manager instance. […]
。因此,除非您以其他用户身份运行用户服务,否则这应该可以工作。
测试的 Systemd 版本:
systemd 253 (253.1-3-arch)
systemd 237
。
答案4
你可以使用
WorkingDirectory=~
并设置相对路径。