我正在为 Web 服务设置守护进程,我想使用 systemdDynamicUser=yes
功能,因为它看起来更干净,不会为每个服务使用不同的用户污染用户表。
按照惯例,我的 Web 服务有一个集成的命令行工具,用于初始化数据库并执行维护任务。这需要以运行 Web 服务的同一用户身份进行,并且需要进行前服务第一次运行,因为没有数据库,它将无法成功启动。
我认为我可以只编辑值ExecStart=
来运行初始化并运行该单元一次oneshot
,但我想知道是否systemd
提供了更方便的方法来完成同样的事情。
答案1
我想我已经明白了。
systemd-run -p DynamicUser=yes -p StateDirectory=mystatedir --working-directory=/path/to/myworkingdir /path/to/myservice myinitcmd
很酷。几乎就像sudo -u myuser /path/to/myservice myinitcmd
。我还注意到 init 脚本可能不一定需要主守护进程可能存在的所有更精细的访问限制,并且 DynamicUser 已经暗示了足够的限制,可以合理安全地运行 init 脚本。
我刚刚弄清楚了这一点,所以如果您觉得有什么不对劲,请采取纠正措施。