Я пытаюсь настроить YouTrack на OS X Lion Server и запустить его при загрузке с помощью launchd
. Я скачал файл jar YouTrack, который я могу успешно запустить из командной строки, используя java -Xmx512m -jar youtrack.jar 8080
. Я также обернул указанную команду run в скрипт оболочки, похожий на этот, который в основном позволяет мне взаимодействовать с активным экземпляром, используя youtrack start
и youtrack stop
. Он сохраняет идентификатор процесса java
процесса в файле и при выходе, чтобы иметь возможность остановить работающий экземпляр, разрешив только один экземпляр и т.д.
Чтобы запустить эту команду во время загрузки, я создал простой plist для launchd и поместил его в /Library /LaunchDaemons в соответствии с инструкциями, приведенными в man launchd.plist
. Основные ключи , используемые в ProgramArguments
youtrack start
и RunAtLoad
(истина). Проблема в том, что при запуске из командной строки youtrack start
создаст файл, содержащий pid процесса java
, и я вижу этот процесс в top
или ps ax
. Но когда команда запускается lanuchd (sudo launchctl load /Library/LaunchDaemons/org.example.youtrack.plist
), полученный pid не будет соответствовать ни одному из запущенных процессов, и веб-сервер YouTrack не запустится. Это почти так, как если бы Java-процесс, запущенный launchd, также завершится после завершения launchd.
Тем не менее, если я вместо этого просто помещу команду java непосредственно в файл launchd plist, она будет работать нормально. Я просто хотел бы понять, почему это так - я думал, что в то время идея запуска состояла в том, чтобы запускать демоны. Но значит ли это, что демон должен работать внутри launchd в течение всей его жизни? Есть ли альтернативный способ запуска демонов с (или без) launchd, который позволил бы мне просто выполнить команду один раз при загрузке? В основном то, что мы использовали, используя @roboot
в cron
в более ранних версиях OS X.