launchctl startet das Programm, listet jedoch keine pid auf

1153
Mike F

Ich habe dieses Problem seit einiger Zeit behoben. Im Internet konsultiert, mehrere Stackexchange-Plattformen und Diskussionsforen. Hier ist meine Problembeschreibung:

Anwendungsfall:

Ich habe Naviserver auf einem Mac os x el capitan 10.11.6 installiert

Anstatt zu rufen

/usr/local/ns/bin/nsd -f -u nsadmin -g nsadmin -t /usr/local/ns/conf/nsd-config.tcl 

Um den Server zu starten, und einen Kill-Befehl, um den Server zu stoppen, möchte ich ihn über ein LaunchDaemon verwalten.

Problembeschreibung:

Ich kann ein LaunchDaemon erfolgreich starten launchctl. Beim Betrachten der launchctlListe wird jedoch die Liste ohne PID angezeigt. Ich muss also den Dienst manuell über beenden kill- stattdessen möchte ich den Dienst mit beenden können launchctl stop.

Frage im Wesentlichen:

Warum listet launchctl nicht die PID des erfolgreich gestarteten LaunchDaemon auf?

Was ich bisher ausprobiert habe

  1. Ändern der Plist-Datei, Minimieren von Parametern, kein KeepAlive, kein OnDemand, Programmparameter
  2. Eigentümerrechte ändern admin: wheel nsadmin: nsadmin admin: root
  3. Wird als LaunchAgent über das Verzeichnis / Library / LaunchAgents ausgeführt

Folgendes habe ich getan:

Ich habe folgende plist unter /Library/LaunchDaemons/org.naviserver.dev01.plist

<?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>org.naviserver.dev01</string>  <key>ProgramArguments</key> <array> <string>/usr/local/ns/bin/nsd</string> <string>-u</string> <string>nsadmin</string> <string>-g</string> <string>nsadmin</string> <string>-t</string> <string>/usr/local/ns/conf/nsd-config.tcl</string> </array>  <key>StandardOutPath</key> <string>/usr/local/var/log/naviserver_daemon.log</string>  <key>StandardErrorPath</key> <string>/usr/local/var/log/naviserver_daemon.log</string> </dict> </plist> 

Es gelten die folgenden Privilegien und Eigentumsrechte

-rw-r--r-- 1 root admin 857 Aug 11 15:03 org.naviserver.dev01.plist 

Starten des Service funktioniert

sudo launchctl load org.naviserver.dev01.plist sudo launchctl start org.naviserver.dev01 

Die launchctl-Liste zeigt jedoch nicht die PID des Dienstes an

sudo launchctl list | grep naviserver - 0 org.naviserver.dev01 

Ich kann den laufenden Prozess über finden

ps -ax | grep nsd 

Momentan starte ich den Server immer manuell über eine killPID neu, was nicht schön ist. Ich möchte das schaffen, launchctlindem man den Prozess startet, aber nicht mit dem Anhalten.

Ist jemand anderes auf dieses Problem gestoßen und ist irgendetwas offensichtlich falsch an meinem Ansatz, das ich ändern kann, um dieses Problem zu lösen?

1

1 Antwort auf die Frage

2
Gordon Davisson

Es sieht so aus, als hätten Sie das -fFlag (Vordergrund) aus dem ProgramArgumentsArray ausgelassen . Ohne dies wird der naviserver im Hintergrund erneut ausgeführt und dann beendet. Dies bedeutet, dass launchd die PID des (im Hintergrund befindlichen) Serverprozesses nicht kennt.

Oh mein! Vielen Dank, dass Sie darauf hingewiesen haben - das Problem wurde gelöst. Vielen Dank! Mike F vor 7 Jahren 0