当我在单元文件中指定工作目录时,我想通过说明符从 ExecStart 部分引用它,即
[Unit]
Description=A test daemon that says hello
[Service]
Type=oneshot
WorkingDirectory=/home/foo/scipts
ExecStart="%<<WORKING_DIRECTORY_SPECIFIER>>/echo_hello.sh"
RemainAfterExit=yes
Systemd 可以实现这一点吗?如果不可以,有没有什么解决方法?
答案1
您无需在 中专门指定工作目录ExecStart
,因为所有命令都会像您已经指定它一样启动。这就是它的重点。
您不应使用~
,因为这将使用服务运行时的 。相反,请使用相对路径$HOME
。$USER
如果您的WorkingDirectory
指向/home/foo/scripts/
,那么您只需要使用ExecStart=./somescript.sh
如果您有子目录,它是同样的事情 - ExecStart=subdir1/subdir2/somescript.sh
。
WorkingDirectory
基本上是cd
用于服务的。
答案2
不,您可以使用~
或绝对目录路径。但要小心:~
很可能指向/root/
该单位用户的家。
并且 WorkingDirectory 本身理解说明符但这些都不是特定于用户的,除了
"%g" User group
"%G" User GID
"%u" User name
"%U" User UID
但这些往往默认为用户root。