Est-il possible de lancer launchd pour définir un propriétaire différent sur les fichiers créés lors de l'exécution d'un travail .plist?

2

J'ai un fichier .plist launchctl dans / Library / LaunchDaemons comme suit:

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

Pour ceux qui se posent des questions, j'utilise le port slocate de MacPorts au lieu de la base de données de localisation native fournie avec OS X. Ce travail .plist met à jour la base de données slocate spécifique à mon répertoire personnel à 5:45 tous les jours. Le paramètre Umask de 077 rend le fichier de sortie lisible uniquement par moi. Cependant, le fichier est créé avec la propriété de root; pas ce que je veux.

Existe-t-il un moyen de spécifier la propriété du fichier de sortie au lieu de la valeur par défaut de root? Je réalise que je peux l'exécuter en tant que LaunchAgent sous ~ / Library / LaunchAgents, mais je préfère que le travail soit exécuté, que je sois connecté ou non, et donc en tant que LaunchDaemon.

Je suis sous OS X 10.10.3 Yosemite.

utilisateur3112401
la source

Réponses:

4

J'ai quelques suggestions. Selon le manuel, vous pouvez définir la clé UserName https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html . Vous pouvez utiliser périodique avec un script shell pour exécuter slocate et modifier les autorisations de la base de données. Configurez une crontab utilisateur. Une crontab utilisateur ne s'exécutera qu'à l'heure spécifiée.

fd0
la source
La définition de la clé UserName a corrigé le problème. Je ne peux pas croire que je n'ai pas vu cela ou que cela ne me soit pas venu à l'esprit. Je cherchais chown alors que j'aurais pu chercher un propriétaire de processus. Je vous remercie. Je pose ceci comme réponse correcte. Je vous inviterai lorsque ma réputation sera suffisante.
user3112401
quelqu'un qui connaît bien le sujet :) a + de moi
Ruskes
0

Au lieu d' /Library/LaunchDaemonsutiliser l'utilisateur basé ~/Library/LaunchAgentsdans votre bibliothèque d'utilisateurs. Ensuite, le processus sera exécuté en tant qu'utilisateur connecté au lieu du compte root.

frdmn
la source
Je préfère que le travail soit exécuté, que je sois connecté ou non. Je suppose que depuis LaunchDaemons s’exécutant en tant que root, ils seraient en mesure de changer le propriétaire des fichiers qu’ils créent. Si ce n'est pas le cas, je vais probablement plutôt créer un autre LaunchDaemon pour modifier la propriété de ce fichier et le faire fonctionner correctement une fois le précédent terminé. Souhaite qu'il y ait une solution plus élégante que celle. Merci de répondre.
user3112401
En fait, non, la stratégie décrite dans mon précédent commentaire ne fonctionnera pas, car les deux tâches seront exécutées lorsque l'ordinateur démarrera ou se réveillera au-delà de l'heure d'exécution planifiée. Au lieu de cela, sur le deuxième travail, j'utiliserai StartInterval 300 ou quelque chose de simplement chown ce fichier toutes les 5 minutes. Toujours inélégant.
user3112401