Запуск демона для сервера subversion завершается неудачно, но работает в оболочке

449
not2savvy

Я пытаюсь настроить сервер 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 подходит.

Где моя ошибка?

2

1 ответ на вопрос

0
not2savvy

Очевидно, что моей ошибкой было не понять, что svnserve --inetdпри запуске в качестве демона ведет себя иначе, чем при запуске из оболочки.

При запуске из оболочки процесс продолжает работать, пока не будет остановлен с помощью ctrl-c.

При запуске в качестве демона (который фактически предназначен для использования этой опции), он не будет продолжать работать. Вместо этого svnserve запускается по запросу на порту 3690, обрабатывает запрос и затем завершается. Как следствие, svnserve нельзя увидеть в списке активных процессов, если запрос не обрабатывается в тот самый момент.