2 votos

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

Tengo un archivo launchctl .plist en /Library/LaunchDaemons como sigue:

<?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 lo estén preguntando, utilizo el puerto slocate de MacPorts en lugar de la base de datos locate nativa que viene con OS X. Esta tarea .plist actualiza la base de datos slocate específica de mi directorio personal a las 5:45 AM todos los días. La configuración Umask de 077 hace que el archivo de salida sólo pueda ser leído por mí. Sin embargo, el archivo se crea con la propiedad de Root; no es lo que quiero.

¿Hay alguna manera de especificar la propiedad del archivo de salida en lugar de la predeterminada de Root? Sé que puedo ejecutar esto como un LaunchAgent en ~/Library/LaunchAgents, pero prefiero que el trabajo se ejecute tanto si estoy conectado como si no, de ahí que lo instale como un LaunchDaemon.

Estoy ejecutando OS X 10.10.3 Yosemite.

4voto

Michael Zhou Puntos 167

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

0 votos

Al establecer la clave UserName se solucionó. No puedo creer que no lo viera o que no se me ocurriera. Estaba buscando chown cuando podría haber estado buscando process owner. Gracias. He puesto esto como respuesta correcta. Te votaré cuando tenga suficiente reputación.

0 votos

Alguien que conozca bien el tema :) un + de mi parte

0voto

frdmn Puntos 313

En lugar de /Library/LaunchDaemons utilizar el usuario basado ~/Library/LaunchAgents en su biblioteca de usuario. Entonces el proceso se ejecutará como el usuario conectado, en lugar de la cuenta Root.

0 votos

Prefiero que el trabajo se ejecute tanto si estoy conectado como si no. Me imagino que como los LaunchDaemons se ejecutan 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 después de que el anterior se complete. Ojalá hubiera una solución más elegante que esa. Gracias por responder.

0 votos

En realidad, no, la estrategia de mi comentario anterior no funcionará, porque ambos trabajos se ejecutarán cuando el ordenador arranque o se despierte pasada la hora de ejecución programada. En su lugar, en el segundo trabajo, voy a utilizar StartInterval 300 o algo así para simplemente chown ese archivo cada 5 minutos. Sigue siendo poco elegante.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X