Der Start des Daemons für den Subversion-Server schlägt fehl, funktioniert aber in der Shell

554
not2savvy

Ich versuche, einen Subversion-Server unter OS X (Sierra) mit der mit Xcode Server bereitgestellten Subversion einzurichten. Ich habe diese Anweisungen befolgt, um einen Daemon einzurichten, um svnserve automatisch zu starten. Meine Plist-Datei sieht folgendermaßen aus:

<?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> 

Wenn ich die plist mit lade sudo load /Library/LaunchDaemons/org.tigris.suversion.plist, wird der Subversion-Server nicht gestartet. Das Systemprotokoll sagt "Dienst wurde mit anormalem Code: 1 beendet".

Ich versuchte, das Problem aufzuspüren, und gab diesen Befehl in der Shell aus:

sudo -u _svn /usr/bin/svnserve --inetd --root=/var/subversion/repositories/ --listen-host=svn.dev.localnet 

was ich erwarten würde, um genau das zu sein, was launchctl von den plist-Spezifikationen ausgehen würde. Von der Shell aus funktioniert es jedoch wie erwartet und der Subversion-Server wird gestartet.

Wo ist mein Fehler?

2

1 Antwort auf die Frage

0
not2savvy

Offensichtlich war mein Fehler nicht zu verstehen, dass svnserve --inetdsich das Verhalten beim Starten als Daemon anders verhält als beim Start von der Shell aus.

Wenn der Prozess von der Shell aus gestartet wird, wird der Prozess weiter ausgeführt, bis er mit ctrl-c angehalten wird.

Wenn er als Dämon gestartet wird (was eigentlich die beabsichtigte Verwendung dieser Option ist), wird er nicht weiter ausgeführt. Stattdessen wird svnserve bei einer Anforderung an Port 3690 gestartet, die Anforderung verarbeitet und anschließend abgebrochen. In der Liste der aktiven Prozesse kann der Dienst daher nur angezeigt werden, wenn zu diesem Zeitpunkt eine Anforderung verarbeitet wird.