Estou executando o svnserve em uma máquina Fedora 17 com o seguinte arquivo de serviço systemd:
[Unit]
Description=Subversion Server
After=syslog.target network.target
[Service]
User=svn
Type=forking
Environment=HOME=/repos/svn
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /repos/svn
PIDFile=/run/svnserve/svnserve.pid
[Install]
WantedBy=multi-user.target
Isso funciona bem, desde que o / var / run / svnserve seja de propriedade de svn: svn, mas quebre durante a reinicialização quando essa propriedade for redefinida para root: root. O que eu quero é adicionar uma etapa de pré-lançamento que chowns o diretório.
Infelizmente não encontrei nenhuma documentação real sobre os arquivos unitários do systemd, mas vi que alguns estavam usando 'ExecStartPre', então tentei fazer isso:
ExecStartPre=/bin/chown svn:svn /run/svnserve
Infelizmente, isso falha com um erro de 'operação não permitida', então parece que o ExecStartPre também é executado como o usuário especificado no arquivo de unidade.
Eu também tentei rodar o arquivo unitário como root, e então iniciar o svnserve como o usuário svn via su, mas isso gerou um erro vago sobre a linha de comando ser inválida.
Como as unidades do systemd podem executar ações como raiz antes de executar um usuário específico?