plötzlich Zeitüberschreitung im Applescript

roedert

roedert

Aktives Mitglied
Thread Starter
Dabei seit
05.01.2011
Beiträge
12.146
Reaktionspunkte
3.314
Diese kleine Script läuft auf dem Mac-Server (10.12.6) seit Monaten oder gar Jahren täglich um alle Kontakte in eine vif zu exportieren. Dient als Backup und ein weiteres Script füllt damit eine mysql-Datenbank für Asterisk und die Astra-Telefone.

Code:
set fileReference to open for access file "SSD1:export.daily:contacts.vcf" with write permission
tell application "Contacts"
    write ((vcard of people) as text) to fileReference as «class utf8»
end tell
close access fileReference
Doch plötzlich läuft es nicht mehr, nach ca 2 Minuten kommt dieser Fehler:

Skriptfehler
„Contacts“ hat einen Fehler erhalten: AppleEvent lieferte eine Zeitüberschreitung.

Hat einer ne Idee wo man da ansetzen könnte?
 
Ich habe keine Ahnung von Skriptsprache, also setze ich mal wo anders an:
Könnte es sein, dass eine der zuletzt importierten Kontakte einen Fehler erzeugt und der Fehler daher nicht im Skript liegt, sonder an anderer Stelle zu suchen ist?

Hintergrund: Ich hatte vor langer Zeit mal ein Problem mit der Kontakte.App, damals noch Adressbuch, mit einer importieren .vcf die als E-Mail-Anhang versendet wurde.

Kleiner Nebeneffekt: Da du, lieber @roedert mit auch schon oft geholfen hast, schiebe ich dein Thema hiermit ein wenig an.
 
Könnte es sein, dass eine der zuletzt importierten Kontakte einen Fehler erzeugt und der Fehler daher nicht im Skript liegt, sonder an anderer Stelle zu suchen ist?
Darauf wird es hinauslaufen .... den letzten mir bekannten hinzugefügten Kontakt hatte ich schon gelöscht - ohne Erfolg. Oder es liegt einfach an der Menge der Kontakte (mittlerweile 370, der vcf-Export ist knapp 12 MB)

- an anderem Mac getestet (aktuellstes macOS) mit gleichen iCloud-Kontakten -> Scriptfehler Zeitüberschreitung
- neuen Benutzer angelegt, Kontakte mit dem einen Standardeintrag per Script exportiert -> fehlerfrei
- vcf-Export importiert und per Script wieder exportiert -> Scriptfehler Zeitüberschreitung
- geschätzte Hälfte der Kontakte gelöscht und erneut exportiert -> fehlerfrei

Da jetzt den "schwarzen Peter" zu finden dürfte sehr aufwendig werden.
Der manuelle Export aller Kontakte über Ablage - Exportieren - vCard exportieren funktioniert aber weiterhin problemlos.

schiebe ich dein Thema hiermit ein wenig an.
Danke :D
 
Zuletzt bearbeitet:
Na ja, bei 370000 Kontakten hätte ich jetzt auch an einen Fehler auf Grund der schieren Anzahl der Kontakte gedacht, aber bei 370?
Zur Eingrenzung der fehlerhaften .vcf kannst ja mal deine Mails durchforsten.

Apropos: Im Eingangspost steht was von „exportieren in vif“, gemeint ist vcf, oder?
 
Was passiert denn bei einem manuellen, nicht gescripteten Export nach vcf?
Und - der Hälfte/Hälfte-Test-Ansatz könnte doch relativ schnell zum Reparieren taugen:
Erste 50% gescriptet exportieren, nächste 25%, nächste …
 
Ok, habe ich wohl falsch verstanden. Dann also partielles Löschen und Export (Fehler ja/nein), und Eingrenzen…
 
Hatte ich auch schon beim Filemaker scripten.

Vielleicht muss das script wieder angestossen werden:


Tell me to close access ... ...
 
Dann also partielles Löschen und Export (Fehler ja/nein), und Eingrenzen…
Es liegt scheinbar wirklich nur an der Menge ... wobei 370 Kontakte jetzt ja eigentlich noch im Rahmen sein sollten. Der Verdacht eines "krummen" Kontaktes hat sich nicht bestätigt:

- leeres Adressbuch -> script-Export fehlerfrei
- alle 370 Kontakte importiert -> script-Export läuft auch Timeout nach 2 Minuten
- Kontakte bis M gelöscht -> script-Export fehlerfrei (Dauer nicht mehr als 1-2 Sekunden)
- alle Kontakte erneut importiert und ab M gelöscht -> script-Export fehlerfrei (Dauer nicht mehr als 1-2 Sekunden)
 
Es gibt auch ein timeout argument
Es scheint ja kein Timing-Problem zu sein, Export <M Dauer max 2 sec, >M auch nur 2 sec ... das Script hängt sich auf, da ändert auch ein höherer Timeout nix dran.

Habs jetzt eine wenig umgestellt und es funktioniert wieder - Laufzeit auch nur wenige Sekunden:

alt:
write ((vcard of people) as text) to fileReference as «class utf8»

neu:
repeat with per in people
write (vcard of per as text) to fileReference as «class utf8»
end repeat
 
  • Gefällt mir
Reaktionen: mausfang
Zurück
Oben Unten