• 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

Zeitgesteuertes Ausführen von Befehlen

  • Ersteller Ersteller TBH
  • Erstellt am Erstellt am

TBH

Alkmene
Registriert
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
 
Für einmaliges starten zu einem bestimmten Zeitpunkt bietet sich auch at an.
Code:
man at
 
Oder einfach Cronnix verwenden.

Oder noch einfacher: Im Kalender (iCal) einen Termin eintragen und im Feld "Erinnerung" die Option "Skript ausführen" verwenden.
 
@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
 
Alles viel zu Umständlich: Du kannst in iCal als erinnerung ein belibiges Script ausführen lassen!

Joey
 
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
 
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.
 
Ich habe es jetzt mit on idle gelöst, vielen Dank für die Hilfe an alle, ihr habt mir sehr geholfen!