Problem mit selbst erstelltem "launchd" Job

Diskutiere mit über: Problem mit selbst erstelltem "launchd" Job im Mac OS X - Unix & Terminal Forum

  1. echt0711

    echt0711 Thread Starter MacUser Mitglied

    Beiträge:
    858
    Zustimmungen:
    12
    Registriert seit:
    11.10.2003
    So ich hatte jetzt mal Gelegenheit mit launchd herumzuexperimentieren. Ich habe dafür das Lingon Tool verwendet (http://lingon.sourceforge.net/)

    Leider habe ich es nicht hinbekommen, daß launchd jeden Tag zum gewünschten Zeitpunkt meine externe Festplatte unmounted...

    entweder er wirft sie direkt wieder aus nachdem ich sie mounte, oder er reagiert garnicht... kann mir da jemand helfen?

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>Label</key>
    	<string>backupvolumedismount</string>
    	<key>LowPriorityIO</key>
    	<true/>
    	<key>Nice</key>
    	<integer>1</integer>
    	<key>OnDemand</key>
    	<true/>
    	<key>ProgramArguments</key>
    	<array>
    		<string>/usr/sbin/diskutil</string>
    		<string>unmount</string>
    		<string>/Volumes/305gb_backup</string>
    	</array>
    	<key>RunAtLoad</key>
    	<false/>
    	<key>StartCalendarInterval</key>
    	<dict>
    		<key>Hour</key>
    		<integer>12</integer>
    		<key>Minute</key>
    		<integer>28</integer>
    	</dict>
    	<key>UserName</key>
    	<string>root</string>
    </dict>
    </plist>
    Wenn ich den "OnDemand" Flag wegnehme, startet der Job scheinbar immer sofort (quasi als Loop). Die Fehlermeldungen im system.log sehen dann so aus:

    Code:
    Jan 11 12:15:49 dual-g5 launchd: backupvolumedismount: respawning too quickly! throttling
    Jan 11 12:15:49 dual-g5 launchd: backupvolumedismount: 9 more failures without living at least 60 seconds will cause job removal
    Jan 11 12:15:49 dual-g5 launchd: backupvolumedismount: will restart in 10 seconds
    
    Wenn ich den Flag hingegen anschalte, passiert garnichts.
    Was mache ich falsch?

    Außerdem die Frage: Brauche ich den root User?
    Die Platte soll ja auch zum richtigen Zeitpunkt ausgeworfen werden, falls kein User angemeldet ist, weil sie 5 Minuten später vom Stromnetz getrennt wird (externe SATA Festplatte, hängt an einer normalen Zeitschaltuhr um die Platte zu schonen)
     
    Zuletzt bearbeitet: 29.01.2009
  2. echt0711

    echt0711 Thread Starter MacUser Mitglied

    Beiträge:
    858
    Zustimmungen:
    12
    Registriert seit:
    11.10.2003
    : den thread push :

    hat wirklich keiner eine idee? :(
     
  3. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Nun, da gibt es einiges zu sagen/fragen:
    1. launchd hatte von Anfang an einen Bug was die zeitgesteuerte Ausführung von Skripten angeht. Der sollte eigentlich mit 10.4.1 schon behoben werden, was aber bisher nicht geschehen ist.
      Das scheint aber hier nicht das primäre Problem zu sein.
    2. Bei OnDemand ist "true" ohnehin der Default Wert, daher sollte es eigentlich keinen Unterschied machen, wenn Du es weglässt. Bei RunAtLoad sieht es übrigens ähnlich aus, nur dass der Default Wert "false" ist.
    3. Der key "UserName" ist mir unbekannt und auch undokumentiert. Woher hast Du den?
    4. Wo ist die plist Datei gespeichert, mit welchen Rechten, wie heisst Sie, und wie lädst Du sie?

    Ich schieb Dich mal nach Unix; ich denke, da passt Deine Frage besser hin.

    [edit]
    Das wird wegen des o.g. Bugs derzeit ohnehin nur dann klappen, wenn der Rechner niemals in den Ruhezustand geht.
     
  4. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.774
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    man launchd.plist

    UserName <string>
    This optional key specifies the user to run the job as. The default is
    the user who submitted the job to launchd.

    ist aber nutzlos das als root zu setzen, weil launchd eh die jobs als root fährt, solang man es nicht anders will, oder?
     
  5. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Ich hatte zwar in die manpage geschaut, hatte aber offensichtlich Tomaten auf den Augen gehabt.
    Danke für die Berichtigung.

    Ob ein Job per default als root läuft, hängt auch davon ab, wo die .plist gespeichert ist, i.d.R. ist es aber so.
     
  6. echt0711

    echt0711 Thread Starter MacUser Mitglied

    Beiträge:
    858
    Zustimmungen:
    12
    Registriert seit:
    11.10.2003
    Moinmoin!

    Cool, ich hatte die Hoffung schon aufgegeben ;)

    Den Key Username hat mir Lingon ( http://lingon.sourceforge.net/ ) generiert, über dieses Tool habe ich versucht den launchd job zu erstellen.

    Die plist liegt in /Library/LaunchDaemons

    Und die Rechte der Datei sind auf
    Eigentümer: System (Lesen/Schreiben)
    Gruppe: wheel (nur lesen)
    Andere: (nur lesen)

    Geladen wird die plist über launchd, dachte ich? :rolleyes:
    Bzw. eben "on demand", zur in der plist eingestellten Uhrzeit... oder funktioniert das etwa ganz anders?

    Sorry - Mein Halbwissen, vermute ich! Bin allerdings aus http://developer.apple.com/macosx/launchd.html auch nur halb schlau geworden…

    Ich hab mir angeschaut, wie Apple seine "daily" und "weekly" scripts angelegt hat und versucht, deren Parameter für meine Zwecke zu übernehmen.

    In Lingon stelle ich den Kram ein, klicke auf "load and save" und nichts passiert.... oder ich klicke auf "runatload", dann wirft der die platte sofort aus, sobald ich "save and load" klicke… also zumindest mein Aufruf "/usr/sbin/diskutil unmount /Volumes/Namederplatte" scheint korrekt zu sein…

    Das getimte Ausführen funktioniert nicht...

    Das ist gewährleistet. Nach 15 Minuten geht der Monitor off, der Ruhezustand steht allerdings auf "nie" und die internen Platten drehen auch die ganze Zeit weiter. Die Kiste, auf der der Job laufen soll ist der Fileserver für eine kleine Arbeitsgruppe. Es geht mir nur darum daß die Backupfestplatte geschont wird was deren Laufzeit angeht, daher hab ich sie an eine Zeitschaltuhr geklemmt, die nur 3 Stunden am Tag Strom auf die externe Platte gibt. Bevor der Strom aus geht, muss die Platte allerdings geunmounted werden - das ist das ganze Problem.

    Ne sehr kreative Backup-Lösung, ich weiss - aber besser als die externe Platte die ganze Zeit online zu lassen, immerhin ist es eine SATA und keine SCSI Platte ;)
     
  7. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    passt
    AFAIK werden ist die Funktionaltät OnDemand mit inetd bzw. xinetd vergleichbar. Mit OnDemand ist die Anfrage auf einem bestimmten Socket gemeint (bei Netzwerk Daemons).

    Das macht Sinn, RunAtLoad bedeutet ja, "führe den Job aus, sobald er geladen wird", also beim Booten/Anmelden oder beim manuellen Laden. und genau das beschreibst Du ja auch so.

    Hast Du mal beobachtet, ob die periodic-jobs bei Dir zur richtigen Zeit laufen? Das sollten sie eigentlich, wenn der Rechner nie schläft.

    Ich würde an Deiner Stelle einen periodic-job nach /Library/LaunchDaemons kopieren und manuell bearbeiten und laden.
    Damit solltest Du zum richtigen Ergebnis kommen.

    HTH
     
  8. echt0711

    echt0711 Thread Starter MacUser Mitglied

    Beiträge:
    858
    Zustimmungen:
    12
    Registriert seit:
    11.10.2003
    Hi und moin!

    Gute Idee, das mit den periodic jobs… also um 3:15uhr hat der rechner vor ein paar tagen auf jeden Fall gerattert (war da noch wach), es gibt in der konsole rotierte logfiles und daily output meldungen usw... schätze also daß die periodic scripts laufen ;)

    wo liegen denn die plists für die periodic jobs? Im Verzeichnis /Library/LaunchDaemons liegt nämlich außer meiner eigenen plist garnichts drin...
    Und Spotlight konnte ich (leider) noch nicht dazu überreden, mir auch Files mit ".name" und aus den "private" Verzeichnissen anzuzeigen. Es fehlt eindeutig die "show Unix Stuff and Manpages" Checkbox in Spotlight :D
     
  9. echt0711

    echt0711 Thread Starter MacUser Mitglied

    Beiträge:
    858
    Zustimmungen:
    12
    Registriert seit:
    11.10.2003
    Edit: Habs gefunden. Die System launchd Daemons liegen auf /System/Library/LaunchDaemons

    Hab da mal meine plist reinkopiert und hoffe, daß sie ausgeführt wird…
    Muss ich die plist bei launchd noch irgendwie bekannt machen bzw. "laden"? Wie geht das manuell?
     
  10. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Selbsterstellte jobs gehören nach /Library/LaunchDaemons; /System/... ist für die Apple Jobs.

    Zum Laden eines Jobs:
    Code:
    launchctl load [-w] /Library/LaunchDaemons/job.plist
    der Schalter -w sorgt dafür, dass ein ggf. vorhandener Disable true entfernt wird.

    HTH
     
Die Seite wird geladen...
Ähnliche Themen - Problem selbst erstelltem Forum Datum
Problem bei der Ausführung von Perl Skripten über SSH Mac OS X - Unix & Terminal 22.10.2013
MacPorts Problem Mac OS X - Unix & Terminal 06.10.2013
XNEST funktioniert - aber Wirrwarr bei Zeichenkodierung / Keybord mapping Problem Mac OS X - Unix & Terminal 05.10.2013
Problem mit PostgreSQL und PostGIS Mac OS X - Unix & Terminal 09.09.2013
Problem mit Leerzeichen im Namen Mac OS X - Unix & Terminal 12.02.2013

Diese Seite empfehlen

Benutzerdefinierte Suche