Запуск демона при запуске в качестве конкретного пользователя на Mac OS X (Server) Mavericks

2945
florian

Я хочу запустить CI-сервер (TeamCity 8.1) при запуске на Mac OS X Server под управлением Mavericks. Я не хочу, чтобы сервер CI запускался пользователем root, а другим пользователем в системе.
Пользователь, с которого я хочу запустить сервер - это server1: staff. Я установил TeamCity в / Applications / TeamCity. Папка TeamCity принадлежит server1: staff.
Затем я создал 2 списка в / Library / LaunchDaemons, принадлежащих root: wheel, но указав, что я хочу, чтобы этот процесс был запущен пользователем server1: staff.

Вот списки. Этот запускает сервер:

<?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> 

Этот запускает агент сборки, который запускает сборки:

<?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> 

При такой конфигурации сервер не запускается при запуске.
Единственный способ запустить сервер при запуске с моей конфигурацией - не указывать имя пользователя / группу пользователей в списке. Но при этом сервер запускается с пользователем root.
Я уже пытался изменить владельца plist, чтобы он соответствовал пользователю server1: staff, но безуспешно.
Я вроде застрял с этой конфигурацией, и я не знаю, что с ней не так.
Любые советы приветствуются.

[EDIT] У
меня нет ничего плохого в Console.app относительно TeamCity.
Чтобы быть уверенным, что я переустановил TeamCity с нуля и т. Д.
В launchd.err.log ничего нет. Хотя я нашел это в launchd.out.log, но я не знаю, когда это произошло (в настоящее время перезагрузка после удаления всех файлов журнала)

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] После перезапуска у меня ничего не появляется в журналах сервера и Console.app (сервер не запускается, поэтому я думаю, что это ожидаемое поведение).

1
Что-нибудь интересное в журналах Console.app после того, как он не запускается? Daniel Beck 10 лет назад 0

1 ответ на вопрос

1
Spiff

Использование всех этих относительных путей немного схематично. Я думаю, что вы не продумываете свой текущий рабочий каталог и относительные пути правильно.

Например, plist агента сборки указывает, что его рабочий каталог…

/Applications/TeamCity/buildAgent

... но один из аргументов программы, который вы передаете бинарному файлу запуска, это ...

../conf/wrapper.conf,

Я почти уверен, что это будет интерпретировано как относящийся к рабочему каталогу…

/Applications/TeamCity/buildAgent

... не каталог двоичного файла ...

/Applications/TeamCity/buildAgent/launcher/bin,

Таким образом, вы на самом деле говорите, чтобы посмотреть в основном ...

/Applications/TeamCity/conf

... который обычно не имеет wrapper.conf, но я думаю, может быть, вы думали, что вы говорите, чтобы посмотреть ...

/Applications/TeamCity/buildAgent/launcher/conf

... где wrapper.confобычно живет

Я думаю, что у вас могут быть и другие ошибки рабочего каталога / относительного пути в ваших списках. Например, похоже, что у вас есть два отдельных logsкаталога, поэтому у вас есть два отдельных набора файлов launchd stdout / stderr. Купить возможно это то, что вы хотели.

Я думаю, что вы должны сначала исправить эти проблемы на пути. Это может быть вся ваша проблема, а не проблема запуска. Но даже если это не так, вам нужно разобраться с этим, чтобы он не мешал дальнейшему устранению неполадок.