我使用以下systemd服务文件在Fedora 17机器上运行svnserve:
[Unit] Description=Subversion Server After=syslog.target network.target [Service] User=svn Type=forking Environment=HOME=/repos/svn ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /repos/svn PIDFile=/run/svnserve/svnserve.pid [Install] WantedBy=multi-user.target
只要/ var / run / svnserve被svn:svn所有,这种方式就可以正常工作,但是当所有权被重置为root:root时,会在重启时断开。 我想要的是添加一个启动前的步骤,使目录。
不幸的是我找不到任何有关systemd单元文件的真实文档,但是我看到有些使用'ExecStartPre',所以我尝试了这个:
ExecStartPre=/bin/chown svn:svn /run/svnserve
可悲的是,这个操作不允许出现错误,所以它看起来像ExecStartPre也以单元文件中指定的用户身份运行。
我也尝试过以root身份运行单元文件,然后通过su启动svnserve作为svn用户,但是却产生了关于命令行无效的模糊错误。
systemd单元在作为特定用户执行之前如何以root身份执行操作?
Fedora中的Subversion软件包使用systemd的tmpfiles机制在root用户启动时创build/run/svnserve (因为打包的.service文件显然以root身份运行守护进程)。 您可以将/usr/lib/tmpfiles.d/svnserve.conf复制到/etc/tmpfiles.d/svnserve.conf并更改所有者。 有关详细信息,请参阅man tmpfiles.d 。
您可以使ExecStartPre成为脚本的sudo调用,并为该脚本configuration用户svn。