Ich möchte launchd verwenden, um bindfs-Befehle bei der Anmeldung als root auszuführen. Ich habe eine Liste in /Library/LaunchAgents/loginsftpjailmount.plist (mit chmod 600) und ein Shell-Skript in /usr/local/bin/loginsftpjailmount.sh.
Ich sollte zunächst sagen, dass es funktioniert - wenn ich das Bash-Skript so ändere, dass es ausgeführt wird
mkdir /Users/Me/Desktop/itworks
Anschließend wird das Verzeichnis "itworks" sowohl beim Anmelden als auch beim Ausführen erfolgreich erstellt
sudo launchctl load /Library/launchAgents/loginsftpjailmount.plist
Der erstellte Ordner gehört root und ich muss mein Passwort eingeben, um ihn zu löschen. Wenn ich das Bash-Skript manuell über das Terminal mithilfe von sudo ausführe, funktioniert der Befehl bindfs.
Um es zusammenzufassen: Ich weiß, dass das Skript funktioniert. Ich weiß, dass die Pliste funktioniert. Ich weiß, dass sie mit launchd zusammenarbeiten. Der Befehl bindfs wird jedoch nicht ausgeführt! Ich habe das Systemprotokoll mit überprüft
sudo grep com.user /var/log/system.log
und es heißt, es wird mit dem Fehler 127 beendet (com.user ist Teil des Etiketts für meine plist). Ich habe online gesucht und keine der Lösungen für Fehler 127 funktioniert für mich. Als Referenz habe ich zwei Plisten verwendet:
<?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/>
und auch
<?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>