• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Einige Blicke in fremde Welten dürft Ihr nun bestaunen und darüber abstimmen, welche davon Euch am meisten gefällt: hier geht es lang für Euer Voting --> Klick

Time Machine Backup verhindern während ein bestimmtes Programm läuft

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
Hallo,

ich habe seit geraumer Zeit das Problem, das ein TM-Backup ein anderes Programm zum Einfrieren bringt.
(Warum das so ist konnte ich leider nicht nachvollziehen. Ich vermute das, da die TC bei mir als Router fungiert, es zu einem kurzen Internetaussetzer kommt.)
Ich kann das Problem leider nicht durch einen Zeitplan umgehen, da das selbst erstellte Programm unregelmäßig und nicht Planbar startet/läuft.

Ich habe bereits nach passenden Apple Scripts gesucht, jedoch keine verzögernden Scripte gefunden.

Habt ihr eine Idee wie ich das Problem beheben kann?
 
TM für die Arbeit am Programm deaktivieren...
 
Manuell? dann müßte ich ja am Rechner sein während das Programm startet/läuft was leider bzw. zum Glück nicht der Fall ist.
Außerdem ist eine manuelle Deaktivierung nicht sinn der Sache ...
Oder gibt es eine Möglichkeit TM zu sagen das es keine Backups, während ein Programm läuft, macht?
 
Hallo,

die beste Lösung wäre, den Grund für den Absturz deines Programms zu erkennen (und wenn möglich zu beheben). Da gäbe es mehrere Möglichkeiten (Loggen... Fehlermeldungen ausgeben lassen usw). Am besten, du postest den Code...

Ansonsten: ja, die Möglichkeit gibt es (man tmutil)
Nur .. was ist, wenn das Backup schon läuft? Man würde wohl einerseits eine Abfrage starten müssen, ob Time Machine schon gestartet ist und dein Programm solange "warten lassen" und andererseits eine für den umgekehrten Fall...
Das wäre durchaus realisierbar ... und funktioniert auch mindestens so gut, wie kochendes Wasser mit Eiswürfeln abzukühlen.

Gruß
 
  • Like
Reaktionen: kalle007
Hallo Sedna,

vielen Dank. Das Problem tritt nur auf wenn während mein Programm läuft TM anfängt ein Backup zu ziehen bzw. schon beim vorbereiten des Backups. Das Problem ist anscheinend ein kurze Unterbrechung der Netzwerkverbindung ... mein Programm fragt versch. Server im Netzwerk und im Internet ab.

werd mich mal bei tmutil reinlesen ... vielen Dank für den Tipp.
 
Hallo,
ja das "sollte" es ... wenn ich während mein Programm läuft das Netzwerk unterbreche und verbinde klappt es auch, mein Programm läuft weiter ... 100%ig kann ich nicht sagen, was da genau schief läuft (entweder mit TM oder meinem Programm) ... hab es jetzt aber simpel gelöst, danke nochmal an sedna für den Tipp.
Falls jemand mal so ein Script brauch hier ist es:

Code:
tell application "Application Name" to activate
delay (10)

tell application "Terminal"
    do shell script "tmutil disable" user name "User" password "password" with administrator privileges
    delay (10)
    --quit
end tell
repeat while application "Application Name" is running
end repeat
if application "Application Name" is not running then
    tell application "Terminal"
        do shell script "tmutil enable" user name "User" password "password" with administrator privileges
        delay (10)
        quit
    end tell
end if
Ich habe es so gemacht, das ich durch das Apple Script mein Programm Starte ... dabei deaktiviert er die TM, wenn das Programm beendet wird aktiviert er die TM wieder.
Application Name = Name des Programms
User = Benutzername (User mit Admin Rechten wir genötigt, da dies tmutil verlangt
Password = Passwort

Geht bestimmt auch besser simpler, aber so ging es schnell und ohne Probleme!

Vielen Dann nochmal sedna für den Tipp.
 
In einem frei zugänglichen AppleScript einen Benutzer mit Admin-Rechten und zugehörigem Passwort zu hinterlegen, ist sicherlich keine gute Idee, zumindest dann nicht, wenn jeder Zugriff auf das AppleScript hat
 
Das Script wird nur lokal benutzt ... aber wenn du es "kritisierst" wie wäre es dann mit einem Verbesserungsvorschlag?
 
Das Problem muss in der Programmierung Deines Programmes gelöst werden, alles andere sind nur Hilfskonstruktionen, lösen aber das ursprüngliche Problem nicht, sondern kurieren nur die Symptome, aber nicht die Ursache. Mich als Ingenieur würde es außerordentlich reizen, das Problem in meinem Programm zu finden, das ließe mir keine Ruhe... aber aus der Ferne ist das gut zu sagen, der Teufel steckt ja bekanntlich im Detail...
 
CommanderTom66 du weichst aus ... wie würdest du das mit dem Passwort umgehen?
Ich habe bereits alles im Programm gemacht ... wenn du meine Beiträge gelesen hast, wüstest du das ein Netzwerk Ausfall meinem Programm nix ausmacht, sowohl mein Programm als auch TM schreiben nichts in die Log-Datein ... ich habe sehr viel versucht, konnte aber keinen Fehler finden, übrigens hab ich jetzt mal auf dem MacBook eines Freundes ausprobiert ... da besteht das Problem nicht ...
 
Hallo,

freut mich, dass ich dir weiterhelfen konnte.

Zu dem Passwort:
Da gäbe es mehrere Möglichkeiten, es zu "verbergen". Von schwach bis stark.. Hier mal ein paar Ideen:

  • Skript/Programm als "nur ausführbar" speichern -> öffnet man es mit einem Texteditor, ist es allerdings dennoch auszulesen

  • Passwort in einer Property speichern (funktioniert nur, wenn das Skript als Programm gespeichert ist). Beim ersten Start gibt man das Passwort ein -> öffnet man es mit einem Texteditor, ist es dennoch auszulesen
Code:
property pw : ""
if pw is "" then
set pw to text returned of (display dialog "Passwort:" default answer "")
end if


  • Skript/Programm als "nur ausführbar" exportieren und Passwort in Variablen verstecken -> im Texteditor nicht wirklich lesbar
Code:
set v to "a"
set w to "p"
set x to "f"
set y to "e"
set z to "l"
set pw to do shell script "echo " & v & w & x & y & z
-- "apfel"


  • Passwort im Skript verschlüsseln (mit sed oder wie auch immer)

Gruß
 
Zuletzt bearbeitet:
Wenn es so sicher wie möglich sein sollte, dann sollte man das Passwort im Schlüsselbund speichern und von dort mit AppleScript abfragen (Stichwort keychain scripting). Dabei sollte man die Variable nach der Benutzung überschreiben, sonst kann das Passwort eventuell dennoch ausgelesen werden.

Das Passwort in Einzelteilen zu speichern ist nicht sicher, das Passwort lässt sich trotzdem auslesen (insbesondere wenn die Variable nicht mehr überschrieben wird). Gleichermaßen sollte man das Passwort nicht mit einem Shellbefehl verschlüsseln, denn der lässt sich auslesen und somit rekonstruieren.

Die Option "nur ausführbar" gibt es übrigens bei mir (Mavericks) nicht mehr.
 
Kurz gesagt, es geht nicht zu lösen. Alle Varianten, es im Skript zu verstecken ist sinnlos - es ist immer rekonstruierbar. Das Adminpasswort kann nicht aus der Keychain ausgelesen werden. Um Passwörter aus der Keychain auszulesen, ist immer das Passwort des Benutzers (oder des Admins) erforderlich. Sonst könnte man ja sofort ein solches Skript bauen, das dann den Vollzugriff bekommt.

Wenn man will, dass das Skript Vollzugriff hat (den es für die Änderung der TM braucht), muss man entweder das Passwort jedes Mal manuell eingeben oder man lebt mit dieser Sicherheitslücke. Passwörter sind in diesem Fall nunmal dazu da, dass Programme Sachen nicht automatisiert machen können.
 
Doch der Keychainansatz funktioniert. Wenn man das Passwort per security Befehl abruft, erscheint eine Meldung, die den Zugriff autorisiert mit der Option "immer erlauben". So sieht bspw. der Befehl aus:

do shell script "security 2>&1 find-generic-password -gs test1 /Users/Name/Library/Keychains/AppleScript.keychain | grep password | sed 's/password: \"//;s/\"$//'"

In diesem Beispiel habe ich extra einen eigenen Schlüsselbund für AppleScript angelegt und frage das Passwort für test1 ab. Diese Methode ist sicher, solange man die Variable nach Gebrauch wieder überschreibt.

Randbemerkung: Je nach Konfiguration der Shell kann es mit Sonderzeichen zu Problemen kommen, wenn man mit iconv das Passwort nach der Abfrage noch einmal in die richtige Zeichenkodierung konvertiert, funktionieren auch entsprechende Sonderzeichen ohne Probleme
 
Hallo,
Keychain Scripting habe ich mit Absicht nicht erwähnt, weil ich mir sicher war, dass es von euch ergänzt wird :)
Tatsächlich ist das wohl der einzige 100% sichere Weg.

@Pill: Das zweite Skript in #12 war nur als Beispiel gedacht. Wenn es genau so übernommen würde, wäre es natürlich einfach. Aber du hast schon recht! ....

Ich habe meinen Beitrag editiert und speichern durch exportieren ersetzt -> dann erscheint in 10.9 die Option "nur ausführbar".


Gruß

---------

Schon etwas aufwändiger:
Code:
decode_chars({"X61", "X70", "X66", "X65", "X6C"})

on decode_chars(these_chars)
    set dcl to {}
    repeat with i in these_chars
      
        copy i to {indentifying_char, multiplier_char, remainder_char}
        set the hex_list to "123456789ABCDEF"
        if the multiplier_char is in "ABCDEF" then
            set the multiplier_amt to the offset of the multiplier_char in the hex_list
        else
            set the multiplier_amt to the multiplier_char as integer
        end if
        if the remainder_char is in "ABCDEF" then
            set the remainder_amt to the offset of the remainder_char in the hex_list
        else
            set the remainder_amt to the remainder_char as integer
        end if
        set the ASCII_num to (multiplier_amt * 16) + remainder_amt
        set ddc to (ASCII character ASCII_num)
        set dcl to dcl & ddc
    end repeat
    display dialog dcl as text
end decode_chars
 
Zuletzt bearbeitet:
@sedna Handler lassen sich auch von außerhalb aufrufen. Bei obigem Beispiel ist es egal wie kompliziert decode_chars() ist, ich muss "nur" den Namen des Handlers und das (verschlüsselte) Passwort herausfinden.
 
Grunz und Grins!
Na dann halt eben ohne Handler :D

Mach ruhig nur weiter so! Nimm schön meine Vorschläge auseinander!

Ja, nee: Nur so kann ich noch was lernen ... und von dir habe ich schon einiges gelernt! :cool:

Gruß
Sedna