O lançamento do daemon para o servidor subversion falha, mas funciona no shell

2

Estou tentando configurar um servidor subversion no OS X (Sierra) usando a subversão fornecida com o Xcode Server. Eu segui estas instruções para configurar um daemon para iniciar automaticamente o svnserve. Meu arquivo plist é assim:

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

Quando eu carrego o plist usando sudo load /Library/LaunchDaemons/org.tigris.suversion.plist , o servidor subversion não aparece. O log do sistema informa "Serviço finalizado com código anormal: 1".

Tentando rastrear o problema, eu emiti este comando no shell:

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

que eu esperaria ser exatamente o que o launchctl começaria a partir das especificações plist. No entanto, a partir do shell, ele funciona como esperado e o servidor de subversão é exibido.

Onde está o meu erro?

    
por not2savvy 09.03.2017 / 16:48

1 resposta

0

Obviamente, meu erro não foi entender que svnserve --inetd se comporta de maneira diferente quando é iniciado como daemon de quando é iniciado a partir do shell.

Quando iniciado a partir do shell, o processo continua em execução até ser interrompido com ctrl-c.

Quando iniciado como um daemon (que é o uso real pretendido desta opção), ele não continuará sendo executado. Em vez disso, o svnserve é iniciado sob uma solicitação na porta 3690, processa a solicitação e, em seguida, é finalizado. Como conseqüência, o svnserve não pode ser visto na lista de processos ativos a menos que uma requisição esteja sendo processada naquele exato momento.

    
por 10.03.2017 / 12:50