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>