我正在尝试使用 Xcode Server 提供的 subversion 在 OS X (Sierra) 上设置 subversion 服务器。我遵循这些说明用于设置守护进程以自动启动 svnserve。我的 plist 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.tigris.subversion</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/svnserve</string>
<string>--inetd</string>
<string>--root=/var/subversion/repositories/</string>
<string>--listen-host=svn.dev.localnet</string>
</array>
<key>UserName</key>
<string>_svn</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
当我使用 加载 plist 时sudo load /Library/LaunchDaemons/org.tigris.suversion.plist
,Subversion 服务器没有启动。系统日志显示“服务以异常代码退出:1”。
为了找出问题所在,我在 shell 中发出了以下命令:
sudo -u _svn /usr/bin/svnserve --inetd --root=/var/subversion/repositories/ --listen-host=svn.dev.localnet
我原本期望 launchctl 能够从 plist 规范中启动它。但是,从 shell 中,它按预期工作,并且启动了 subversion 服务器。
我的错误在哪里?
答案1
显然,我的错误是没有理解svnserve --inetd
作为守护进程启动时的行为与从 shell 启动时的行为有何不同。
从 shell 启动时,该进程一直运行,直到使用 ctrl-c 停止。
当作为守护进程启动时(这是此选项的实际用途),它将不是继续运行。相反,svnserve 会在端口 3690 收到请求时启动,处理请求,然后终止。因此,除非当时正在处理请求,否则 svnserve 无法在活动进程列表中看到。