• 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

[10.6 Snow Leopard] Script zeitgesteuert mit Hilfe von launchd ausführen klappt nicht

Kein-At-auf-Q

Erdapfel
Registriert
14.06.10
Beiträge
5
Hallo zusammen!

Ich habe mir ein kleines Problem geschaffen bei dem ich Hilfe brauche.

Folgende Problematik:
Ich hätte gern Zeitgesteuert (einmal am (Arbeits)Tag) eine Benachrichtigung mit growlnotify. Eine persönliche "Hintern hoch und Zeiterfassung erledigen" Benachrichtigung um 16 Uhr. Mit iCal würde das wohl gehen, ich hätte es aber gern schön :-)

Folgende Herangehensweise bisher:
Ich habe mir als Oberfläche für launchd Lingon gezogen und unter "My Agents" eine neue Aufgabe eingetragen. Dann habe ich versucht growlnotify mit den Parametern -s -t 'Titel' -m 'Nachricht' testweise alle 60 Sekunden zu triggern. Als das nicht geklappt hat, habe ich mir für diese Aufgabe ein Shell-Script angelegt und die Rechte zuerst auf 700, später auf 777 gesetzt. Klappt aber auch nicht so wirklich, an den Rechten liegt es scheinbar auch nicht. Das Script selbst läuft ohne Probleme im Terminal aufgerufen. Nachricht, Titel, sticky - alles passt.

Hilfe?

Vielen Dank schon mal!
Q
 
Ich hoffe dir ist klar, dass ein neu abgespeicherter launchd-Job erst mal aktiviert werden muss um seine Wirkung zu zeigen. Im Falle eines User-Agents geschieht das mittels "launchctl"-Aufruf oder einfach durch Neuanmeldung.
 
Du könntest iCal doch als reinen Zeitschalter "missbrauchen", dann bleibt es im Hintergrund.
Alles andere kannst du doch in dein Script reinpacken.
Oder verstehe ich irgendwas falsch?

Ralf
 
Hallo Rasta,

vielen Dank für die schnelle Antwort. Ich gehe davon aus, dass ein aktivieren eines launchd-Jobs in Lingon durch "Load" erledigt wird. Ein neuanmelden am System - bzw. sogar ein Neustart - hat allerdings auch nicht geholfen. Ich finde leider keine wirklich hilfreiche Anleitung welche Bedingungen ein Script erfüllen muss und wie ich es einstellen sollte damit launchd es ausführen kann.

Das von Lingon erstellte XML:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.mmc.bevo-mc1.Zeiterfassung</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Users/bevo/Zeiterfassung.sh</string>
	</array>
	<key>RunAtLoad</key>
	<false/>
	<key>StartInterval</key>
	<integer>60</integer>
</dict>
</plist>

Was mache ich hier falsch?

Gruß,
Q
 
Du könntest iCal doch als reinen Zeitschalter...

Hallo Doc!

Stimmt, könnte ich. Aber dann hätte ich entweder einen täglichen Termin eingetragen, oder einen zusätzlichen Kalender. Eigentlich spräche nichts wirklich gegen iCal, ich würde es nur gern "richtig" machen. Juckt mich einfach in den Fingern. Unter Windows habe ich das ganze mit der Aufgabenplanung ohne Schmerzen erledigen können. Kommt schon, Windows kann doch wohl nicht besser sein als OS X, oder? :-p

Gruß,
Q
 
dass ein aktivieren eines launchd-Jobs in Lingon durch "Load" erledigt wird.
Ein "load" in Lingon??? (Huh?) Ich nehme mal an, du meinst ein:
Code:
[SIZE="-1"]launchctl load $HOME/Library/LaunchAgents/meins.beispiel.plist[/SIZE]
Ja, das würde den Job aktivieren.

Ich finde leider keine wirklich hilfreiche Anleitung welche Bedingungen ein Script erfüllen muss und wie ich es einstellen sollte damit launchd es ausführen kann.
Es muss:
- ausführbar sein (chmod u+x ...)
- einen gültigen Shebang besitzen ("#!/bin/bash" als Kopfzeile)
- unabhängig von Umgebungsvariablen sein, die meist nur in deiner Terminalumgebung gesetzt sind.
"Agents" laufen in einer minimalen Umgebung, deine lokale "~/.bash_profile" usw sind irrelevant. Du hast in deinem Skript also nicht unbedingt all das zur Verfügung, das du von deinen normalen Shellsitzungen her gewohnt bist.
Info über diese Umgebung verschafft dir:
Code:
launchctl export

Was mache ich hier falsch?
Nutze mal die Möglichkeit, die aktiven Jobs zu überwachen:
Code:
launchctl list
...zeigt dir alle momentan geladenen Jobs, und zwar mit Prozess-ID falls sie grade laufen, bzw mit ihrem exit-Status des letzten Laufs. Findest du dort als exit was anderes als eine Null vor, hat dein Skript einen Fehler ausgeworfen.
Findest du den Job gar nicht vor, stimmt irgendwas mit der plist nicht.
 
Ich meine den großen Button in Lingon auf dem Load steht. Der steht für "Load" (vermute ich) :-p

So, fehler gefunden. Vielen Dank für den Tip mit den Umgebungsvariablen (der Pfad war es in meinem Fall). Der Pfad zum Script hat zwar gepasst, der Pfad IM Script allerdings war mit Annahme der Verfügbarkeit von /usr/local/bin/ geschrieben.

Jetzt hoffe ich nur noch, dass meine eingetragenen Zeitparameter passen. Wir werden es sehen in... 47 MInuten.

Vielen Dank für die Hilfe!
Q