我已成功在 RHEL 8 中的 ~/.config/systemd/user 目录下启用用户单元。启用 linger 还使我可以选择无需登录即可启动服务。我的问题是,是否有可能让用户单元(即 .service 文件)位于 ~/.config/systemd/user 之外的不同路径,并且仍然能够像我现在一样启动这些用户单元?
答案1
是的,这是可能的;man systemd.unit
是您的朋友和帮手!
User Unit Search Path
~/.config/systemd/user.control/*
$XDG_RUNTIME_DIR/systemd/user.control/*
$XDG_RUNTIME_DIR/systemd/transient/*
$XDG_RUNTIME_DIR/systemd/generator.early/*
~/.config/systemd/user/*
$XDG_CONFIG_DIRS/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
$XDG_RUNTIME_DIR/systemd/generator/*
$XDG_DATA_HOME/systemd/user/*
$XDG_DATA_DIRS/systemd/user/*
...
/usr/lib/systemd/user/*
$XDG_RUNTIME_DIR/systemd/generator.late/*
和
用户管理器实例的加载路径集可以使用各种环境变量来增加或改变。环境变量又可以使用环境生成器来设置,请参阅 systemd.environment-generator(7)。特别是,可以使用 systemd-environment-d-generator(8) 轻松设置 $XDG_DATA_HOME 和 $XDG_DATA_DIRS。因此,此处列出的目录只是默认目录。查看根据编译选项和当前环境使用将使用的实际列表
systemd-analyze --user unit-paths
此外,通过创建指向目录中单元文件的符号链接,可以将其他单元从不在单元加载路径上的目录加载到 systemd 中。您可以使用 systemctl 链接来实现此目的;请参阅 systemctl(1)。当 systemd 启动时,链接单元文件所在的文件系统必须是可访问的(例如,不允许使用 /home/ 或 /var/ 下的任何目录,除非这些目录位于根文件系统上)。
现在有趣的问题是你所描述的是否应该是用户单元文件,或者您是否实际上想要安装系统以您的用户身份运行的服务单元文件。