• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

AppleScript Programm lässt sich nicht schließen

Blotto-Nim

Granny Smith
Registriert
27.03.11
Beiträge
16
Hallo,

Ich habe folgendes Problem:
Um meine Daten auf der Arbeit zu sichern, habe ich ein kleines AppleScript geschrieben, dass die notwendigen Netzlaufwerke mounted und anschließend alle paar Minuten zwei Ordner (einen lokalen und einen auf dem Netzlaufwerk) mit rsync synchronisiert.

Klappt an sich auch super, nur kann ich das Programm leider nicht mehr beenden (außer mit "sofort beenden").

Vielleicht hat ja jemand eine Idee an was es liegen könnte.

Vielen Dank!

Script:

mount volume "smb://<servername>" as user name "<username>"


on idle
do shell script "rsync -acu --stats --delete -b --backup-dir=<ordnerpfad1> <ordnerpfad_lokal> <ordnerpfad_netzlaufwerk>"
return 800
end idle
 
Dein Skript sollte eigentlich so funktionieren. Du könntest mal einen Error-Handler einbauen, vielleicht gibt's ja ein Problem mit rsync. Lässt sich das Programm denn von Anfang an nicht richtig beenden oder erst nach gewisser Zeit?
 
Vielen Dank für die Antwort.
Der Error-Handler gibt mir "leider" nichts aus.
Ich habe jetzt festgestellt, dass es zwar doch beendet wird. Allerdings dauert es immer mehrere Minuten, bis es endlich beendet ist.
Könnte das vielleicht an der idle Umgebung liegen und gibt es dann vielleicht einen Befehl das direkt zu unterbrechen?
 
Wenn du einen Rechtsklick auf das Programmsymbol im Dock machst und dann die alt-Taste drückst, erscheint der Eintrag "Sofort Beenden". Wenn allerdings gerade rsync läuft, ist das vielleicht nicht so super, da rsync dann abgebrochen wird.

Für deine Zwecke würde sich vielleicht sowieso sinnvoller einen launchd-Job zu erstellen, der rsync ausführt, falls das Netzwerklaufwerk gemountet ist.
 
Ja sofort beenden funktioniert natürlich, aber denke auch, dass das nicht die beste Lösung ist.
bin mir nicht ganz sicher, was du mit lanched-Job meinst. Nur, wenn das Laufwerk gemounted wird? Ich wollte schon ein permanentes Backup auch während der Arbeitszeit.
Ich denke auch, dass es an rsync liegt. gibt es da vielleicht eine Möglichkeit es direkt zu beenden im script?
 
Google mal nach launchd, damit lassen sich Jobs planen und regelmäßig ausführen. Lingon ist ein Programm mit GUI, mit dem du solche Jobs sehr einfach erstellen kannst, wenn du sie nicht von Hand erstellen möchtest.

Mit "nur wenn das Laufwerk gemountet ist" meine ich, dass rsync nur ausgeführt werden soll, wenn das Laufwerk auch verbunden ist. Das lässt sich recht einfach prüfen, in dem du in dein Shell-Script eine if-Abfrage einbaust.

Du könntest noch das aus Post #2 probieren, nämlich den do shell script-Befehl in einen try-Block zu packen.
 
Ich habe das Problem jetzt gefunden. Im Nachhinein war es doch eigentlich relativ offensichtlich. Da ich die Option -c verwendet habe, die ja bedeutet, das von jedem File (auch den nicht geänderten) eine checksum gebildet wird vor der Übertragung hat es bei meiner Datenmenge einfach sehr lange gedauert, bis rsync einen Lauf beendet hatte.

Den Tip mit launchd finde ich sehr interessant - vielen Dank dafür! Vielleicht habe ich bald mal noch Zeit mich damit etwas mehr zu beschäftigen.

Im Moment sieht das vollständige AppleScript so aus, für jeden, den es interessiert:



on run
try
mount volume "smb://serveradresse" as user name "username"
end try
end run


on idle
try

do shell script "rsync -au --stats -P --delete -b --backup-dir=<BackupOrnderPfad> <QuellePfad> <ZielPfad>"
return 1800
on error error_message number error_number
display alert ("Something's wrong!") message error_message & (" Error number ") & error_number & "."
end try
end idle


on quit
try
do shell script "rsync -au --stats -P --delete -b --backup-dir=<BackupOrnderPfad> <QuellePfad> <ZielPfad>"
on error error_message number error_number
display alert ("Something's wrong!") message error_message & (" Error number ") & error_number & "."
end try

set the alert_message to "Unmount Fileserver?"
display dialog the alert_message buttons {"Yes", "No"} default button 1
set my_choice to the button returned of the result
if my_choice is "Yes" then
tell application "Finder"
eject "Fileserver"
end tell
else
tell application "Finder"
continue quit
end tell
end if
continue quit
end quit