1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Zeitgesteuertes Ausführen von Befehlen

Dieses Thema im Forum "AppleScript" wurde erstellt von TBH, 03.10.07.

  1. TBH

    TBH Alkmene

    Dabei seit:
    28.12.06
    Beiträge:
    31
    Hallo liebe User,
    ich habe ein Applescript geschrieben, welches schon mehr oder weniger Zeitgestuert ein routine ausführt. Die ungefähre Struktur wäre so:

    ...
    routine(1.5,3)
    ...
    on routine(zeit, parameter)
    delay zeit * 3600
    ....
    end routine

    Man kann also das Skript starten und die Ausführung des Befehls beliebig verzögern durch Übergabe einer Wartezeit. Da dies aber recht umständlich ist, und es einfacher wäre, statt der Verzägerungszeit einfach eine direkte Uhrzeit anzugeben (zb 1932 für 19:32 Uhr), wollte ich mal fragen, wie man solche Probleme am elgantesten löst?

    Ich dachte an eine schleife, die z.B. alle 30Sek. die routine aufruft. Diese wiederum überprüft dann, ob die oben vorgegebene Zeit erreicht ist und führt dann ihren code aus.
    Für mich klingt das allerdings ein wenig unsauber und ich weiß leider nicht, wie man in applescript überhaupt mit Zeit arbeitet, wie ich also an aktuelle stunde und minute komme.

    Ich wäre für Tipps bezüglich der Ausführung des Problems, also der Uhrzeitgestuerten Ausführung, und auch für Hinweise oder Links zum Arbeiten mit Zeiten (hour, minute) in Applescript sehr dankbar :)

    Viele Grüße,

    TBH
     
  2. KayHH

    KayHH Gast

    #2 KayHH, 03.10.07
    Zuletzt von einem Moderator bearbeitet: 03.10.07
  3. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Für einmaliges starten zu einem bestimmten Zeitpunkt bietet sich auch at an.
    Code:
    man at
    
     
  4. dust123

    dust123 Rhode Island Greening

    Dabei seit:
    13.02.05
    Beiträge:
    483
    Oder einfach Cronnix verwenden.

    Oder noch einfacher: Im Kalender (iCal) einen Termin eintragen und im Feld "Erinnerung" die Option "Skript ausführen" verwenden.
     
  5. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    @zeno
    at run ist unter Mac OS X aus Sicherheitsgründen inaktiv!

    In AppleSkript gibts übrigens einen on idle Handler mit dem man solche Dinge machen kann. Was auch immer Dein Skript tut.
    Gruß Pepi
     
  6. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Ah thx! Hätte vorher mal auch reinlesen sollen in die man file..
     
  7. joey23

    joey23 Mecklenburger Königsapfel

    Dabei seit:
    26.11.06
    Beiträge:
    9.736
    Alles viel zu Umständlich: Du kannst in iCal als erinnerung ein belibiges Script ausführen lassen!

    Joey
     
  8. TBH

    TBH Alkmene

    Dabei seit:
    28.12.06
    Beiträge:
    31
    Erstmal vielen Dank für die Antworten. Die iCal-Methode erscheint auch sehr umständlich, da "routine" mehrmals zu verschiedenen Zeitpunkten ausgeführt werden soll:

    ...
    routine(1.5,3)
    routine(2,7) -- zwei stunden nach der ersten
    routine(...
    ...
    on routine(zeit, parameter)
    delay zeit * 3600
    ....
    end routine

    Es wären also bis zu 20x zu verschiedenen Zeiten. Und das ist auch per iCal zu umständlich und unübersichtlich, leider. Für Cronnix wäre es ja notwendig, für jedesmal, wo die routine auszuführen wäre, einen cronjob anzulegen, habe ich das richtig verstanden? Erscheint mir auch wieder ein wenig kompliziert im Vergleich zu "1x auf Starten drücken und das Skript laufen lassen"...

    nichts desto trotz nochmal danke an alle Antworter,

    TBH
     
  9. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Wie schon erwähnt, wäre on idle dann die beste Wahl...
    Mit etwas Trickserei kann man -mehr oder weniger- Uhrzeiten in AS benutzen, aber eigentlich sind Sekunden (ab Mitternacht) die Zeitangabe:

    Code:
    property my_list : {45480, 45490, 45500}
    on idle
    	
    	set Werktags to {Monday, Tuesday, Wednesday, Thursday, Friday}
    	if Werktags contains ((current date)'s weekday) and ((current date)'s time is in my_list) then
    		tell application "Finder"
    			delay 1
    			make new Finder window
    		end tell
    	end if
    	
    	return 1
    end idle


    Launchd ist natürlich eine bessere Wahl, wie auch cron.
    Cronnix nutze ich nicht, aber es sollte dort genau so funktionieren, wie im Terminal selber:

    30 8-20/2 * * 1-5 würde z.B. dein Script von Montag bis Freitag alle 2 Stunden zwischen 8:30 und 20:30 ausführen.
     
  10. TBH

    TBH Alkmene

    Dabei seit:
    28.12.06
    Beiträge:
    31
    Ich habe es jetzt mit on idle gelöst, vielen Dank für die Hilfe an alle, ihr habt mir sehr geholfen!
     

Diese Seite empfehlen