macOS Sonoma [gelöst] LaunchAgent: Starten von Script wenn bestimmter USB-Stick eingesteckt wird

jteschner

Aktives Mitglied
Thread Starter
Dabei seit
30.05.2006
Beiträge
4.248
Reaktionspunkte
2.557
Hallo, mal wieder eine Frage an die Experten

Ziel: wenn ich einen bestimmten USB-Stick ins MBP stecke soll der Inhalt eines Verzeichnisses vom MBP auf den Stick gesynct werden

Meine (funktionierende) Lösung bislang:
1. LaunchAgent (.plist) enthält "StartOnMount" als Trigger und startet
2. Script, dass auf den bestimmten Stick prüft und dann ggf. einen rsync startet
So weit so gut und funktioniert.

Problem:
Es wird bei jedem Mount (SMB, USB) das script gestartet und so eigentlich unnötigerweise häufig das Script getriggert (ca. 40-50 mal pro Tag).
Den Stick stecke ich aber nur alle paar Tage mal ein.

Alternative:
im LaunchAgent "watchPaths" nutzen zB auf /Volumes/ - hilft aber so nicht, da das den gleichen Effekt hat wie StartOnMount

Frage:
Hat da jemand einen Vorschlag zur Lösung des (zugegeben kleinen) Problems?
Die existierenden Keys des launchd habe ich alle durchgesehen und finde nichts passendes.
Im Internet habe ich auch gesucht aber auch nichts passendes gefunden.
Ich könnte mir noch vorstellen, dass bei einem "USB-Mount" irgendwo eine spezielle Datei vom System angelegt wird, auf die ich per watchPaths checken könnte - finde da aber nichts. Gibt es so etwas?

Nebenbei: ich habe mir "LaunchControl" gekauft. Wirklich eine sehr gute Investition (im Rahmen einer Pizza mit großem Bier) für Leute, die häufiger oder zumindest hin- und wieder mit dem launchd was machen wollen/müssen. War ein guter Tip vom letzten mal ;-)
 
Pack die Nicht Ständig Ausführen Logic doch ins Script, wenn der Trigger so stumpf agiert.
 
Pack die Nicht Ständig Ausführen Logic doch ins Script, wenn der Trigger so stumpf agiert.
Es geht mir aber doch um den Trigger, der so häufig kommt.
Im Script fange ich natürlich ab:
Ist es der richtige USB-Stick/Mount? Wenn ja, dann rsync, sonst exit.
 
Es geht mir aber doch um den Trigger, der so häufig kommt.
Das kannst mit den vorgegebenen Triggern StartOnMount/WatchFolder nun mal nicht verhindern.
Wird ja nach jedem Standby neu gemountet usw.
Da müsstest du wirklich den Stick nur anstecken, wenn du das triggern willst und wieder auswerfen/abziehen.
 
Das kannst mit den vorgegebenen Triggern StartOnMount/WatchFolder nun mal nicht verhindern.
Wird ja nach jedem Standby neu gemountet usw.
Daher die Frage: Gibt es nicht einen speziellen Ordner oder eine Datei in macos, die bei einstecken eines USB Gerätes erstellt/geändert wird? Dann könnte ich per watchPaths darauf gehen.
Vielleicht geht auch <KeepAlive> in Verbindung mit <PathState> - aber KeepAlive hat ja eigentlich eine andere Funktion ...

Na ja, vielleicht weiß ja noch jemand anderer was ...
 
/Volumes/Volumename
Aber ist ja nicht einzigartig und bevor du stundenlang rum probierst, bau doch kurz einen Datum Check ins Script, wenn letzte Mal erfolgreich gelaufen ist.
 
/Volumes/Volumename
Das habe ich nun mal getestet.
Ich bin zuvor davon ausgegangen, dass ich nur einen existierenden Pfad bei watchPath eingeben kann.
Ist aber nicht so.

Nun wird nur noch das script aufgerufen und ausgeführt, wenn ich den Stick einstecke (Ordner /Volumes/stickname wird angelegt)
und wenn ich den Stick entferne (Ordner /Volumes/stickname wird gelöscht)

So passt es besser denn alle anderen mounts triggern das script nicht mehr. Sehr gut!

Danke für die Idee.
 
Zurück
Oben Unten