¿Se puede hacer que launchd establezca un propietario diferente en los archivos que crea mientras ejecuta un trabajo .plist?

Tengo un archivo launchctl .plist en /Library/LaunchDaemons de la siguiente manera:

<?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>david.ports.slocate.home.updatedb</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/local/bin/slocate</string>
        <string>-U</string>
        <string>/Users/david</string>
        <string>-o</string>
        <string>/Users/david/slocate_david.db</string>
    </array>
    <key>Umask</key>
    <string>077</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>5</integer>
        <key>Minute</key>
        <integer>45</integer>
    </dict>
</dict>
</plist>

Para aquellos que se preguntan, utilizo el puerto de ubicación de MacPorts en lugar de la base de datos de ubicación nativa que se envía con OS X. Este trabajo .plist actualiza la base de datos de ubicación específica de mi directorio de inicio a las 5:45 a.m. todos los días. La configuración de Umask de 077 hace que el archivo de salida solo lo pueda leer yo. Sin embargo, el archivo se crea con la propiedad de root; no es lo que quiero

¿Hay alguna forma de especificar la propiedad del archivo de salida en lugar de la raíz predeterminada? Me doy cuenta de que puedo ejecutar esto como LaunchAgent en ~/Library/LaunchAgents, pero prefiero que el trabajo se ejecute ya sea que haya iniciado sesión o no, por lo que lo instalo como LaunchDaemon.

Estoy ejecutando OS X 10.10.3 Yosemite.

Respuestas (2)

Tengo algunas sugerencias. De acuerdo con el manual, puede configurar la clave de nombre de usuario: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html . Podría usar periodic con un script de shell para ejecutar slocate y cambiar los permisos de la base de datos. Configure un crontab de usuario. Un crontab de usuario solo se ejecutará a la hora especificada.

La configuración de la clave UserName lo arregló. No puedo creer que no vi eso o que no se me ocurrió. Estaba buscando a chown cuando podría haber estado buscando al propietario del proceso. Gracias. Puse esto como respuesta correcta. Te votaré cuando tenga suficiente reputación.
alguien que conozca bien el tema :) un + de mi parte

En lugar de /Library/LaunchDaemonsusar el usuario basado ~/Library/LaunchAgentsen su biblioteca de usuarios. Luego, el proceso se ejecutará como el usuario que inició sesión, en lugar de la cuenta raíz.

Prefiero que el trabajo se ejecute tanto si estoy conectado como si no. Me imagino que dado que LaunchDaemons se ejecuta como root, podrían cambiar el propietario de los archivos que crean. Si ese no es el caso, lo que probablemente haré en su lugar es crear otro LaunchDaemon para cambiar la propiedad de ese archivo y hacer que se ejecute bien después de que se complete el anterior. Ojalá hubiera una solución más elegante que esa. Gracias por responder.
En realidad, no, la estrategia de mi comentario anterior no funcionará, porque ambos trabajos se ejecutarán cuando la computadora arranque o se active más allá del tiempo de ejecución programado. En cambio, en el segundo trabajo, usaré StartInterval 300 o algo así para simplemente cortar ese archivo cada 5 minutos. Todavía poco elegante.