¿Se puede hacer un inicio para establecer un propietario diferente en los archivos que crea mientras se ejecuta un trabajo .plist?


2

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, uso el puerto de slocate de MacPorts en lugar de la base de datos de localización nativa que se envía con OS X. Este trabajo .plist actualiza la base de datos de slocate específica de mi directorio principal a las 5:45 AM todos los días. La configuración de Umask de 077 hace que el archivo de salida sea legible solo para mí. Sin embargo, el archivo se crea con la propiedad de la raíz; no es lo que quiero

¿Hay una manera de especificar la propiedad del archivo de salida en lugar del valor predeterminado de la raíz? Me doy cuenta de que puedo ejecutar esto como LaunchAgent en ~ / Library / LaunchAgents, pero prefiero que el trabajo se ejecute si estoy conectado o no, por lo tanto, lo instalo como LaunchDaemon.

Estoy ejecutando OS X 10.10.3 Yosemite.

Respuestas:


4

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


Establecer la clave UserName lo arregló. No puedo creer que no haya visto eso o que no se me haya ocurrido. Estaba buscando Chown cuando podría haber estado buscando propietario del proceso. Gracias. Puse esto como respuesta correcta. Te votaré cuando tenga suficiente reputación.
user3112401

alguien que conoce bien el tema :) a + de mi parte
Buscar웃

0

En lugar de /Library/LaunchDaemons utilizar el usuario basado ~/Library/LaunchAgents en su biblioteca de usuario. 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 si estoy conectado o 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é 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.
user3112401

En realidad, no, la estrategia en mi comentario anterior no funcionará, ya que ambos trabajos se ejecutarán cuando la computadora arranque o se despierte más allá del tiempo de ejecución programado. En cambio, en el segundo trabajo, usaré StartInterval 300 o algo para simplemente chown ese archivo cada 5 minutos. Todavía poco elegante.
user3112401
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.