启动 Subversion 服务器守护进程失败,但在 Shell 中可以运行

启动 Subversion 服务器守护进程失败,但在 Shell 中可以运行

我正在尝试使用 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 无法在活动进程列表中看到。

相关内容