Verständnisfrage zu launchctl und daemons

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verständnisfrage zu launchctl und daemons

    Schönen guten Morgen.

    Hier erst mal die Vorgeschichte:
    Ich habe eine Applikation, die als Daemon arbeiten soll und dass unabhängig vom angemeldeten Benutzer. Dafür habe ich eine Plist-Datei erstellt und diese in das Verzeichnis /Library/LaunchDaemons/ kopiert. Nun starte ich den Daemon mit dem Befehl: launchctl load /Library/LaunchDaemons/name_der_plist_datei, welcher auch geladen wird, aber nur, solange der Benutzer angemeldet ist.

    Jetzt kommt die eigentliche Fragestellung:
    Mit dem Befehl launchctl list kann ich einen Eintrag von meiner Plist-Datei finden. Mit einem "sudo" davor, also sudo launchctl list sehe ich diesen Eintrag nicht mehr. Für mich sieht das nun so aus, dass für jeder Benutzer seine eigene "launchd-Liste" verwaltet wird und ich meinen Daemon anscheinend unter "sudo" starten muss, damit dieser auch mit dem System geladen wird.

    Das versuche ich nun mit sudo launchctl load /Library/LaunchDaemons/name_der_plist_datei und bekomme als Fehlermeldung "nothing found to load".

    Welcher ist eigentlich der korrekte Weg, um einen Daemon zu startet, der mit dem System geladen wird und nicht mit dem Anmelden des Benutzer?
    Wohin muss ich die Plist-Datei kopieren, weil unter "sudo" diese anscheinend nicht gefunden wird?

    Ich komme aus der Windows-Welt und bin neu bei MacOS. Daher glaube ich, dass ich einfach nur falsch vorgehe, aber eigentlich kurz vorm Ziel bin.

    Danke & Gruß Nobik

    EDIT: Habe mein Thema in der falschen Kategorie platziert, wollte es eigentlich bei Unix reinpacken :sick:
  • RE: Verständnisfrage zu launchctl und daemons

    Ich weiß nicht, ob ich dich richtig verstanden habe, zumal dqs nicht meine Domäne ist.

    Apropos Domäne:
    ~/Library/LaunchAgents Per-user agents provided by the user.
    /Library/LaunchAgents Per-user agents provided by the administrator.
    /Library/LaunchDaemons System wide daemons provided by the administrator.
    /System/Library/LaunchAgents Mac OS X Per-user agents.
    /System/Library/LaunchDaemons Mac OS X System wide daemons.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Verständnisfrage zu launchctl und daemons

    Original von Amin Negm-Awad
    ... zumal dqs nicht meine Domäne ist.


    dqs -> diese Abkürzung sagt mir nix :(

    Hier noch mal eine verkürzte Fassung:
    Ich möchte meine App als Daemon startet bzw. laufen lassen. Dieser soll mit dem System starten, nicht mit dem Benutzer.

    Meine Vorgehensweise habe ich oben erklärt. Diese funktioniert aber nicht so, wie ich es gerne hätte und daher glaube ich, dass ich die Funktionsweise von launchd nicht richtig verstanden habe.
  • RE: Verständnisfrage zu launchctl und daemons

    Original von Amin Negm-Awad
    Apropos Domäne:
    /Library/LaunchDaemons System wide daemons provided by the administrator.
    [...]
    /System/Library/LaunchDaemons Mac OS X System wide daemons.


    ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • RE: Verständnisfrage zu launchctl und daemons

    Original von Nobik
    Original von Amin Negm-Awad
    ... zumal dqs nicht meine Domäne ist.


    dqs -> diese Abkürzung sagt mir nix :(

    Hier noch mal eine verkürzte Fassung:
    Ich möchte meine App als Daemon startet bzw. laufen lassen. Dieser soll mit dem System starten, nicht mit dem Benutzer.

    Meine Vorgehensweise habe ich oben erklärt. Diese funktioniert aber nicht so, wie ich es gerne hätte und daher glaube ich, dass ich die Funktionsweise von launchd nicht richtig verstanden habe.

    dqs = das.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ihr möchtet mir bestimmt mitteilen, dass ich die Plist-Datei aus dem falschen Verzeichnis lade... Das habe ich schon alles ausprobiert und trotzdem beendet sich der Daemon, wenn ich mein Benutzer abmelde.

    Habe gerade mit sudo launchctl laod /System/Library/LaunchDaemons/Plist-Datei den Daemon gestartet (warum auf einmal doch, weiß ich nicht), dieser läuft aber unter meinem Benutzerkonto und beendet sich dementsprechend, wenn ich mich abmelde. Soll dieser nicht unter root laufen???

    Kann man bei MacOS überhaupt eigene Daemons startet, die auch ohne angemeldeten Benutzer weiter laufen (Stichwort: Windows-Services)???
  • Da sagst du was! Das habe ich bis jetzt immer ausgelassen, nur am Anfang habe ich es ein Paar mal versucht. :D

    :tongue: Nach dem Neustart wird der Daemon bereits im Login-Bereich gestartet, da ich via Netzwerk darauf zugreifen kann. Jetzt bin ich um einiges weiter als vorher. So einfach kann das sein :tongue:


    Jetzt aber ist es so, dass der Daemon während des Anmeldevorgangs neu gestartet wird. Das merke ich daran, dass mein Client mir eine Meldung ausgibt, dass der Server (Daemon) nicht erreichbar ist. Ist das immer so bei MacOS oder vermisse ich eine bestimmte Einstellung in der Plist oder im launchctl-Kommando.

    Gruß Nobik
  • Original von Nobik
    Da sagst du was! Das habe ich bis jetzt immer ausgelassen, nur am Anfang habe ich es ein Paar mal versucht. :D

    :tongue: Nach dem Neustart wird der Daemon bereits im Login-Bereich gestartet, da ich via Netzwerk darauf zugreifen kann. Jetzt bin ich um einiges weiter als vorher. So einfach kann das sein :tongue:


    Jetzt aber ist es so, dass der Daemon während des Anmeldevorgangs neu gestartet wird. Das merke ich daran, dass mein Client mir eine Meldung ausgibt, dass der Server (Daemon) nicht erreichbar ist. Ist das immer so bei MacOS oder vermisse ich eine bestimmte Einstellung in der Plist oder im launchctl-Kommando.

    Gruß Nobik

    Hehehehehehe

    Ich glaube, es gibt so etwas wie ein "per User"-Key, der das steuert. Nur als Hinweis, denn ich bin jetzt deutlich zu faul, das nachzuschauen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Der Tipp von vorhin hat mich auch nicht weiter gebracht. Habe mich heute den ganzen Tag mit Daemons beschäftigt und bin immer noch da, wo ich am Anfang war ?(

    Aktuell ist mein Stand so, dass beim Systemstart der Daemon gestartet wird mit "root"-Rechten. Dann wenn ich mich mit meinem Benutzer anmelde, dann wird der Prozess neu gestartet und meinem Benutzer zugewiesen. Somit hat der Daemon keine "root"-Rechte mehr und ist doch im Prinzip auch kein Daemon mehr, sondern mehr ein Agent, oder???

    Über weitere Tipps und Anregungen würde ich mich sehr freuen :rolleyes:


    Einen schönen Abend noch
  • Schönen guten Morgen. Ab in die zweite Runde :D

    So habe ich die Plist-Datei aufgebaut:

    Quellcode

    1. <dict>
    2. <key>Label</key>
    3. <string>com.myCompany.myApplication</string>
    4. <key>ProgramArguments</key>
    5. <array>
    6. <string>open</string>
    7. <string>-g</string>
    8. <string>/Applications/myAppDir/myApplication.app</string>
    9. </array>
    10. <key>UserName</key>
    11. <string>root</string>
    12. <key>GroupName</key>
    13. <string>wheel</string>
    14. <key>KeepAlive</key>
    15. <true/>
    16. <key>OnDemand</key>
    17. <false/>
    18. </dict>
    Alles anzeigen

    Alle betroffenen Dateien haben die Rechte -rw-r--r-- und die Verzeichnisse drwxr-xr-x. Alle haben den Besitzer root und Gruppe wheel.

    Gruß Nobik
  • Original von Nobik
    Der Tipp von vorhin hat mich auch nicht weiter gebracht. Habe mich heute den ganzen Tag mit Daemons beschäftigt und bin immer noch da, wo ich am Anfang war ?(

    Aktuell ist mein Stand so, dass beim Systemstart der Daemon gestartet wird mit "root"-Rechten. Dann wenn ich mich mit meinem Benutzer anmelde, dann wird der Prozess neu gestartet und meinem Benutzer zugewiesen. Somit hat der Daemon keine "root"-Rechte mehr und ist doch im Prinzip auch kein Daemon mehr, sondern mehr ein Agent, oder???

    Über weitere Tipps und Anregungen würde ich mich sehr freuen :rolleyes:


    Einen schönen Abend noch

    Sag mal, du hast es aber nicht vergessen, den Eintrag wieder aus der Plist des Nutzers zu entfernen?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Amin Negm-Awad
    Sag mal, du hast es aber nicht vergessen, den Eintrag wieder aus der Plist des Nutzers zu entfernen?


    Normalerweise habe ich es immer gemacht. Mit launchctl list sehe ich den Eintrag auch nicht mehr und launchctl unload gibt mir die Fehlermeldung Error unloading: com.myCompany.myApplication aus.

    Heißt es jetzt, dass es sauber ist, oder sollte man ein "reset" durchführen (falls so was geht)???
  • Original von Jens
    Mal doof gefragt: deine App ist aber schon eine CLI app?

    Und auch ein richtiger daemon?


    Wie sagt man so schön: Es gibt keine doofen Fragen!!! Ich bin noch recht unerfahren, was MacOS angeht und bin über jeden Tipp froh, den ich bekommen kann. Will die Sache endlich abhacken.

    Also: es ist eine Application, die keine GUI-Sachen einbindet und als Ausgabe die Console nutzt. Ich habe das Ding nicht programmiert, daher geh ich erst einmal davon aus, dass es alles korrekt ist. Und im Login-Bereich läuft es doch alles korrekt. Also müsste es in der Hinsicht alles OK sein :sick:

    Was meinst du jetzt mit "... richtiger daemon?"
  • Original von Nobik
    Was meinst du jetzt mit "... richtiger daemon?"


    Na wenn die app von Hand im Terminal gestartet wird dann läuft sie auch permanent und tut ihren Dienst? Wartet auf Netzwerkanfragen oder was auch immer dieser daemon machen soll? Oder beendet sie sich gleich wieder?

    Ein daemon ist eine Hintergrundprogramm welches permanent läuft bis es beendet wird (von aussen oder durch ein bestimmtes Ereignis).
    malloc: *** vm_allocate(size=1665622016) failed (error code=3)