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>
quelle
Antworten:
Der bindfs-Prozess muss mit root-Rechten gestartet werden. Das Starten als Agent würde dies verhindern.
Also
sudo launchctl unload ...
undsudo launchctl remove ...
(der Unterbefehl remove entfernt den Agenten aus der launchd-Datenbank - die Datei wird nicht gelöscht!) Verschieben Sie die plist nach / Library / LaunchDaemons / und laden Sie sie erneut mitsudo launchctl load ...
.Eine ordnungsgemäß benannte und zusammengesetzte org.user.bindfs.sftpjail.plist würde folgendermaßen aussehen:
Der WatchPath-Schlüssel wird häufig benötigt (in meinem Fall), um Zeitprobleme zu vermeiden. Sie können die Schlüssel StandardErrorPath / StandardOutPath und die zugehörigen Zeichenfolgen entfernen, nachdem Sie sichergestellt haben, dass alles ordnungsgemäß funktioniert.
quelle