launchd-Job scheitert an iCloud-Dateien, obwohl der Test per SSH klappt
Lehre: launchd-Jobs mit Zugriff auf geschützte Ordner mit einem eigenständigen Python betreiben und nativ über launchd testen, nie nur per SSH.
Problem
Ein Python-Skript liest per launchd aus iCloud Drive und scheitert still mit PermissionError. Von Hand über SSH gestartet läuft es fehlerfrei.
Ursache
Das virtuelle Environment baute auf einem Python, das in einem App-Bundle liegt (hier Xcode). macOS ordnet Binärdateien in App-Bundles bei der Rechtevergabe (TCC, Festplattenvollzugriff) falsch zu. Ein SSH-Lauf erbt dagegen die Rechte der Login-Sitzung und täuscht so ein Funktionieren vor.
Lösung
- Für launchd-Jobs ein eigenständiges Python verwenden (z. B. Homebrew), nicht eines aus einem App-Bundle.
- Dem tatsächlichen Binärpfad den Festplattenvollzugriff geben; nach jedem Python-Update erneuern.
- Testen mit
launchctl kickstart, nicht per SSH.