Starten Sie den Daemon beim Start als bestimmter Benutzer unter Mac OS X (Server) Mavericks

3099
florian

Ich möchte einen CI-Server (TeamCity 8.1) beim Start auf einem Mac OS X Server starten, auf dem Mavericks ausgeführt wird. Ich möchte nicht, dass der CI-Server vom Root-Benutzer, sondern von einem anderen Benutzer im System gestartet wird.
Der Benutzer, mit dem ich den Server starten möchte, ist server1: staff. Ich habe TeamCity in / Applications / TeamCity installiert. Der TeamCity-Ordner gehört server1: staff.
Dann habe ich 2 Plisten in / Library / LaunchDaemons erstellt, die root: wheel gehören, aber angeben, dass dieser Prozess vom server1: staff-Benutzer gestartet werden soll.

Hier sind die plists. Dieser startet den Server:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>WorkingDirectory</key> <string>/Applications/TeamCity</string> <key>Debug</key> <false/> <key>Label</key> <string>jetbrains.teamcity.server</string> <key>OnDemand</key> <false/> <key>KeepAlive</key> <true/> <key>ProgramArguments</key> <array> <string>bin/teamcity-server.sh</string> <string>run</string> </array> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>logs/launchd.err.log</string> <key>StandardOutPath</key> <string>logs/launchd.out.log</string> <key>UserName</key> <string>server1</string> </dict> </plist> 

Hiermit wird der Build-Agent gestartet, der die Builds ausführt:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Debug</key> <false/> <key>KeepAlive</key> <true/> <key>Label</key> <string>jetbrains.teamcity.BuildAgent</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>launcher/bin/TeamCityAgentService-macosx-universal-32</string> <string>-c</string> <string>../conf/wrapper.conf</string> </array> <key>RunAtLoad</key> <true/> <key>SessionCreate</key> <true/> <key>StandardErrorPath</key> <string>logs/launchd.err.log</string> <key>StandardOutPath</key> <string>logs/launchd.out.log</string> <key>WorkingDirectory</key> <string>/Applications/TeamCity/buildAgent</string> <key>UserName</key> <string>server1</string> </dict> </plist> 

Bei dieser Konfiguration wird der Server beim Start nicht gestartet.
Die einzige Möglichkeit, den Server beim Start mit meiner Konfiguration zu starten, besteht darin, den Benutzernamen / die Benutzergruppe in der Liste anzugeben. Damit startet der Server jedoch mit dem root-Benutzer.
Ich habe bereits versucht, die Eigentümerschaft der plist zu ändern, damit sie dem server1 entspricht: staff user, jedoch ohne Erfolg.
Ich bleibe bei dieser Konfiguration fest und weiß nicht, was daran falsch ist.
Irgendwelche Tipps sind willkommen.

[EDIT]
Ich habe in Console.app nichts falsches bezüglich TeamCity.
Um sicher zu sein, dass ich TeamCity von Grund auf neu installiert habe, usw.
In der Datei launchd.err.log ist nichts enthalten. Ich habe dies zwar in launchd.out.log gefunden, weiß aber nicht, wann es passiert ist (startet gerade nach dem Löschen aller Protokolldateien)

BuildId=null, AgentOwnAddress='null', AlternativeAddresses=[10.175.11.48, 192.168.2.92], Port=9090, Version='29939', PluginsVersion='29939-md5-51785f46b7e643a588892acce02b9333', AvailableRunners=[Ant, Duplicator, gradle-runner, Inspection, Ipr, JPS, Maven2, rake-runner, simpleRunner, Xcode], AvailableVcs=[perforce, mercurial, jetbrains.git, svn, cvs], AuthorizationToken='afccc2fae65d1c580e34d4aed4cc55df', PingCode='DX5fzIvbgFCvVghhwuvARdEU33XOfzCW'}  jvm 1 | Call http://localhost:8111/RPC2 buildServer.registerAgent3: java.net.ConnectException: Connection refused  jvm 1 | Registering on server http://localhost:8111, AgentDetails  jvm 1 | Call http://localhost:8111/RPC2 buildServer.registerAgent3: java.net.ConnectException: Connection refused  wrapper | TERM trapped. Shutting down. jvm 1 | Processing shutdown hook.  jvm 1 | Sending agent force shutdown command to: http://localhost:9090  jvm 1 | Shutdown command successfully sent. Agent is exiting.  jvm 1 | Stop command called  jvm 1 | Agent process finished  jvm 1 | Agent has exited with code: 30  jvm 1 | Launcher is exiting  wrapper | <-- Wrapper Stopped  

[EDIT2] Nach dem Neustart habe ich nichts in den Serverprotokollen und Console.app (der Server startet nicht, also denke ich, dass es sich um ein erwartetes Verhalten handelt).

1
Interessantes in den Console.app-Protokollen, nachdem es nicht gestartet werden konnte? Daniel Beck vor 10 Jahren 0

1 Antwort auf die Frage

1
Spiff

Die Verwendung all dieser relativen Pfade ist etwas skizzenhaft. Ich denke, Sie denken nicht richtig durch Ihr aktuelles Arbeitsverzeichnis und die relativen Pfade.

Beispielsweise gibt die Build-Agent-Plist an, dass das Arbeitsverzeichnis Folgendes ist:

/Applications/TeamCity/buildAgent

… Aber eines der Programmargumente, die Sie an die Launcher-Binärdatei übergeben, ist…

../conf/wrapper.conf.

Ich bin mir ziemlich sicher, dass dies als relativ zum Arbeitsverzeichnis von… interpretiert werden würde.

/Applications/TeamCity/buildAgent

… Nicht das Binärverzeichnis von…

/Applications/TeamCity/buildAgent/launcher/bin.

Also sagst du es eigentlich, um in die Hauptsache zu schauen…

/Applications/TeamCity/conf

… Die normalerweise keine hat wrapper.conf, aber ich denke, Sie dachten vielleicht, Sie hätten es gesagt?

/Applications/TeamCity/buildAgent/launcher/conf

… Wo wrapper.confnormalerweise lebt.

Ich denke, Sie haben vielleicht noch andere Fehler in Ihrem Verzeichnis und dem relativen Pfad in Ihren Listen. Es sieht zum Beispiel so aus, als hätten Sie zwei separate logsVerzeichnisse. Sie haben also zwei getrennte Sätze von startd stdout / stderr-Dateien. Kaufen Sie vielleicht das, was Sie wollten.

Ich denke, Sie sollten diese Pfadprobleme wahrscheinlich zuerst beseitigen. Dies kann Ihr gesamtes Problem sein, überhaupt kein Startproblem. Aber selbst wenn dies nicht der Fall ist, müssen Sie dies klären, damit weitere Problemlösungen für Launchd nicht möglich sind.