Запуск демона для сервера subversion завершается неудачно, но работает в оболочке
Я пытаюсь настроить сервер Subversion в OS X (Sierra), используя Subversion, предоставленный с сервером XCode. Я следовал этим инструкциям по настройке демона для автоматического запуска 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".
Пытаясь отследить проблему, я выполнил эту команду в оболочке:
sudo -u _svn /usr/bin/svnserve --inetd --root=/var/subversion/repositories/ --listen-host=svn.dev.localnet
что я ожидаю, что будет именно то, что launchctl будет начинаться из спецификации plist. Однако из оболочки он работает, как и ожидалось, и сервер Subversion подходит.
Где моя ошибка?
1 ответ
Очевидно, моей ошибкой было не понять, что svnserve --inetd
ведет себя иначе, когда запускается как демон, когда он запускается из оболочки.
При запуске из оболочки процесс продолжает работать, пока не будет остановлен с помощью ctrl-c.
При запуске в качестве демона (который фактически предназначен для использования этой опции), он не будет продолжать работать. Вместо этого svnserve запускается по запросу на порту 3690, обрабатывает запрос и затем завершается. Как следствие, svnserve нельзя увидеть в списке активных процессов, если запрос не обрабатывается в тот самый момент.