• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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?
 

orydz

Zwiebelapfel
Registriert
23.05.09
Beiträge
1.291
TM für die Arbeit am Programm deaktivieren...
 

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
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?
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
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

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
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.
 

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
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.
 

CommanderTom66

Zuccalmaglios Renette
Registriert
30.12.13
Beiträge
262
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
 

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
Das Script wird nur lokal benutzt ... aber wenn du es "kritisierst" wie wäre es dann mit einem Verbesserungsvorschlag?
 

CommanderTom66

Zuccalmaglios Renette
Registriert
30.12.13
Beiträge
262
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...
 

kalle007

Jamba
Registriert
07.09.09
Beiträge
56
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 ...
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
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:

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
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.
 

Schniko

Reinette Coulon
Registriert
01.08.08
Beiträge
954
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.
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
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
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
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:

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
@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.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
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