Launchctl-Eintrag ist immer weg!!!

  • Launchctl-Eintrag ist immer weg!!!

    Schönen guten Morgen.

    Ich habe heute ein ganz speziellen und merkwürdigen Fall.

    Ein Daemon wird mit der entsprechenden .plist-Datei bei "launchctl" registriert, damit dieser mit dem System gestartet wird. Soweit so gut, funktioniert auch alles.

    Jetzt habe ich ein Fall bekommen, dass auf einem MacBookPro nach einem System-Neustart der Daemon nicht ausgeführt wird. Ich habe mir den MacBook näher angeschaut und habe festgestellt, dass nach dem Neustart der Eintrag bei "launchctl" weg ist.

    Meine Vorgehensweise ist folgende:

    Der Daemon wird so registriert

    Quellcode

    1. sudo launchctl load -w /Library/LaunchDaemons/plist


    Hier bekomme ich auch den Eintrag zu sehen

    Quellcode

    1. sudo launchctl list


    Wenn ich den Prozess abschieße, dann wird dieser von "launchctl" auch wieder gestartet (so wie es in der Konfigurations-Datei angegeben ist).


    Bis jetzt lief es auf einigen MacBoocs und iMacs korrekt, bis auf ein Paar Macs. Da läuft nach einem Neustart nix mehr.

    Quellcode

    1. sudo launchctl list

    Mein Daemon ist hier nicht mehr verzeichnet


    Ist jemanden von euch so ein Problem bekannt?
  • Hier noch ein Paar zusätzliche Informationen. Vielleicht klingelt es jetzt bei jemandem...

    Ich habe ein Daemon und eine Konfigurations-Datei. Die Datei lege ich ins Verzeichnis "/Library/LaunchDaemons" mit der vorgeschriebenen Berechtigung "rw-r--r-- root wheel".

    Der Daemon wird während der Installation gestartet mit dem Befehl: "sudo launchctl load -w /Library/LaunchDaemons/plist.datei".
    An sich funktioniert ja alles OK und ohne Probleme, nur dass auf ein Paar Macs nach einem Neustart nichts mehr läuft.

    Ich vermute, dass das Problem weder von der OS Version noch vom Gerät abhängig ist (MacBook Pro mit 10.6.3 läuft alles prima; anderes MacBook Pro mit 10.6.3 läuft nicht).

    Wenn ich die Plist-Datei ins "/Library/LaunchAgents" verschiebe und anschließend das System neu starte, dann läuft der Daemon auch auf dem einem MacBook, natürlich aber mit den Benutzer-Rechten (in diesem Fall geht es auch, ohne dass ich vorher mit "launchctl laod" den Daemon registrieren muss).

    Gerade habe ich aus Spaß die Plist-Datei ins "/System/Library/LaunchDaemons"-Verzeichnis verschoben, mit "sudo launchctl load..." geladen und das System neu gestartet. Und sie einer an, auf dem Sorgenkind-MacBook läuft nun der Daemon mit root Rechten.

    Meines Wissens nach ist aber das "/System/..."-Verzeichnis nicht dafür gedacht. Gerade dafür bietet doch MacOS das "/Library/LaunchDaemons"-Verzeichnis an. Aber warum funktioniert es dann nicht, wie es soll ?(
  • Ich glaube, dass ich den Fehler gefunden habe. Ich schreibe hier meine Lösung rein, damit diese auch für andere zugänglich ist.

    Also, das Problem lag am "/Library/LaunchDaemons/"-Verzeichnis.
    Ich weiß jetzt nicht warum, aber dieses Verzeichnis hatte auf meinem Sorgekind-Mac folgende Berechtigung: "775 root admin"

    Dieses ist mir per Zufall aufgefallen und da habe ich es einfach geändert in: "755 root wheel" und schon funktioniert es auch korrekt.

    Ich denke mal, dass es eine Sicherheitsfunktion von MacOS ist, damit in dem Verzeichnis auch nur Konfigurations-Dateien (.plist-Dateien) liegen, die nur vom ROOT erstellt worden sind. Daher wurde mein Daemon auch nicht gestartet. Warum aber Macs unterwegs sind, die dort falsche Berechtigungen gesetzt haben, weiß ich echt nicht.

    In dem "Festplatten-Dienstprogramm" gibt es ja die Funktion "Zugriffsrechte des Volumes überprüfen". Habe ich testweise ausgeführt und dort wurde aufgelistet, dass das Verzeichnis falsche Berechtigungen hat.


    Schönen Abend an alle, ich geh erst einmal ein Kaffee trinken :D