Problem mit selbst erstelltem "launchd" Job

  1. echt0711

    echt0711 Thread StarterMacUser Mitglied

    Mitglied seit:
    11.10.2003
    Beiträge:
    858
    Zustimmungen:
    12
    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)
     
    echt0711, 11.01.2006
  2. echt0711

    echt0711 Thread StarterMacUser Mitglied

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

    hat wirklich keiner eine idee? :(
     
    echt0711, 12.01.2006
  3. maceis

    maceisMacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    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.
     
    maceis, 12.01.2006
  4. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.160
    Zustimmungen:
    3.885
    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?
     
    oneOeight, 13.01.2006
  5. maceis

    maceisMacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    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.
     
    maceis, 13.01.2006
  6. echt0711

    echt0711 Thread StarterMacUser Mitglied

    Mitglied seit:
    11.10.2003
    Beiträge:
    858
    Zustimmungen:
    12
    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 ;)
     
    echt0711, 13.01.2006
  7. maceis

    maceisMacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    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
     
    maceis, 13.01.2006
  8. echt0711

    echt0711 Thread StarterMacUser Mitglied

    Mitglied seit:
    11.10.2003
    Beiträge:
    858
    Zustimmungen:
    12
    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
     
    echt0711, 13.01.2006
  9. echt0711

    echt0711 Thread StarterMacUser Mitglied

    Mitglied seit:
    11.10.2003
    Beiträge:
    858
    Zustimmungen:
    12
    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?
     
    echt0711, 13.01.2006
  10. maceis

    maceisMacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    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
     
    maceis, 13.01.2006
Die Seite wird geladen...
Ähnliche Themen - Problem selbst erstelltem
  1. Babaganoush
    Antworten:
    5
    Aufrufe:
    931
  2. Arko95
    Antworten:
    5
    Aufrufe:
    2.149
    Meilenstein
    15.05.2015
  3. twr
    Antworten:
    0
    Aufrufe:
    618
  4. pfannkuchen2001
    Antworten:
    1
    Aufrufe:
    1.073
    ruerueka
    16.09.2013
  5. Tiger007
    Antworten:
    2
    Aufrufe:
    940
    KAMiKAZOW
    24.07.2005