3 votes

Launchd n'exécute pas la commande bindfs

Je souhaite utiliser launchd pour exécuter des commandes bindfs à la connexion, en tant que Root. J'ai une plist dans /Library/LaunchAgents/loginsftpjailmount.plist (avec chmod 600) et un shell script dans /usr/local/bin/loginsftpjailmount.sh.

Je dois commencer par dire que cela fonctionne - si je change le script de bash pour exécuter

mkdir /Users/Me/Desktop/itworks

puis il crée avec succès le répertoire "itworks", à la fois lors de l'ouverture de session et en exécutant la commande

sudo launchctl load /Library/launchAgents/loginsftpjailmount.plist

Le dossier créé appartient à Root et je dois taper mon mot de passe pour le supprimer. Lorsque j'exécute manuellement le script bash script à partir du terminal en utilisant sudo, la commande bindfs fonctionne.

En résumé, je sais que le script fonctionne. Je sais que la plist fonctionne. Je sais qu'ils fonctionnent ensemble avec launchd. Mais la commande bindfs ne s'exécute pas ! J'ai vérifié le journal système avec

sudo grep com.user /var/log/system.log

et il dit qu'il sort avec l'erreur 127 (com.user fait partie de l'étiquette de ma plist). J'ai cherché en ligne et aucune des solutions pour l'erreur 127 ne fonctionne pour moi. Pour référence, les deux plistes que j'ai utilisées sont :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.user.loginitem</string>
<key>ProgramArguments</key>
<array>
    <string>bash</string>
    <string>-c</string>
    <string>bash -c "bindfs /Volumes/BRIGHTRED/ServedDocuments /sftpjail/Documents"</string>
</array>
<key>RunAtLoad</key>
<true/>

et aussi

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.user.loginitem</string>
        <key>Program</key>
        <string>/usr/local/bin/loginsftpjailmount.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

2voto

klanomath Points 63400

Le processus bindfs doit être lancé avec les privilèges Root. Le fait de le lancer en tant qu'agent empêcherait cela.

Donc sudo launchctl unload ... y sudo launchctl remove ... (la sous-commande supprimer supprime l'agent de la base de données launchd - le fichier ne sera pas supprimé !) la plist, déplacez la plist dans /Library/LaunchDaemons/ et rechargez-la avec sudo launchctl load ... .

Un fichier org.user.bindfs.sftpjail.plist correctement nommé et composé ressemblerait à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>org.user.bindfs.sftpjail</string>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/local/bin/bindfs</string>
                <string>/Volumes/BRIGHTRED/ServedDocuments</string>
                <string>/sftpjail/Documents</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/org.user.bindfs.sftpjail.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/org.user.bindfs.sftpjail.out</string>
        <key>WatchPaths</key>
        <array>
                <string>/Volumes/BRIGHTRED</string>
        </array>
</dict>
</plist>

La clé WatchPath est souvent nécessaire (elle l'était dans mon cas) pour éviter les problèmes de synchronisation. Vous pouvez supprimer les clés StandardErrorPath/StandardOutPath et leurs chaînes après vous être assuré que tout fonctionne correctement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X