Кажется, что Jenkins является целью nohup в сценарии, запущенном через ssh, как я могу предотвратить это? - PullRequest
4 голосов
/ 05 марта 2012

Я пытаюсь создать задание Jenkins, которое перезапускает программу, которая постоянно запускается на одном из наших серверов.

В качестве команды для запуска я указываю следующее:

cd /usr/local/tool && ./tool stop && ./tool start

Сценарий 'tool' содержит строку типа:

nohup java NameOfClass &

Вывод этого заканчивается в моей сборочной консоли, а не в nohup.out, поэтому задание никогда не завершается, пока я не завершу его вручную, что завершаетпрограмма.

Как заставить nohup вести себя так же, как и с терминала?

Ответы [ 4 ]

7 голосов
/ 28 марта 2012

Если я правильно понял вопрос, Дженкинс убивает все процессы в конце сборки, и вы хотели бы, чтобы какой-то процесс оставался запущенным после завершения сборки.

Вы должны прочитать https://wiki.jenkins -ci.org / display / JENKINS / ProcessTreeKiller

По сути, Jenkins ищет процессы с некоторым секретным значением в переменной среды BUILD_ID.Просто переопределите его для процессов, которые вы хотите оставить в покое.

0 голосов
/ 09 февраля 2018

В новых конвейерных заданиях установка BUILD_ID больше не запрещает Jenkins убивать ваши процессы после завершения задания. Вместо этого вам нужно установить JENKINS_NODE_COOKIE:

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java NameOfClass &'

См. вики на ProcessTreeKiller и этот комментарий в Jenkins Jira для получения дополнительной информации.

0 голосов
/ 31 августа 2017

У меня была похожая проблема с запуском сценария оболочки от jenkins в качестве фонового процесса. Я исправил это с помощью следующей команды:

BUILD_ID = dontKillMe nohup ./start-fitnesse.sh &

В вашем случае BUILD_ID = dontKillMe nohup java NameOfClass &

0 голосов
/ 05 марта 2012

Попробуйте добавить & на этапе сборки Jenkins и перенаправить вывод, используя > nohup.out.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...