Ошибка процесса утечки файлов в JENKINS
Я получаю эту ошибку, когда я настроил задание на остановку и запуск сервера tomcat:
Обработать пропущенные файловые дескрипторы. Подробнее см. http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build
Когда я googled, я получил рекомендуемое решение как set BUILD_ID=dontKillMe
Это точное решение?
Если да, где мне нужно установить BUILD_ID? Внутри ant/post build script?
Кто-нибудь может прояснить это?
Ответы
Ответ 1
Да, создание фальшивого BUILD_ID
для процесса говорит Дженкинсу игнорировать этот процесс во время обнаружения порожденных процессов, поэтому этот процесс не будет убит после завершения задания.
Использование: введите BUILD_ID=dontKillMe
перед вашей командой, например, в шаге Execute shell
:
BUILD_ID=dontKillMe nohup ./yourStartScript.sh &
Примечание: см. также nohup
Ответ 2
Добавьте эту строку в качестве аргумента JAVA_ARGS при запуске вашего сервера jenkins (я поместил мой на /etc/default/jenkins в свой Ubuntu)
-Dhudson.util.ProcessTree.disable=true
И вы закончили
Ответ 3
Вы вызываете команду от Jenkins, которая порождает другой процесс -
команда tomcat-start завершается, но его дочерний процесс все еще запущен
(это настоящий веб-сервер tomcat, который вы пытались запустить).
Дженкинс иногда идентифицирует эту ситуацию как возможную проблему,
но страница, о которой вы упомянули, также объясняет, как ее решить
(короче говоря: не начинайте кота с Дженкинса, если не знаете, как это сделать).
Ответ 4
По умолчанию Дженкинс убьет весь порожденный процесс при завершении сборки.
Чтобы переопределить это, вам нужно создать переменную среды BUILD_ID.
Перейти к Jenkins → Управление Jenkins → Настройка системы
Теперь в разделе "Глобальные свойства" в разделе "Переменные среды" нажмите кнопку "Добавить", чтобы добавить новую переменную среды.
Дайте Name= BUILD_ID и value = 'allow_to_run_as_daemon start_my_service' (без цитаты).
Нажмите кнопку "Сохранить". И все готово.
Теперь процесс появления будет продолжать выполняться даже после завершения сборки.