2017-01-04 2 views
2

Я написал скрипт perl, чтобы запустить слушателя в базе данных. Скрипт perl отлично работает при запуске с терминала, он запускает прослушиватель, и даже когда я выхожу из машины и снова загружаюсь, слушатель работает и работает (как и должно быть).Слушатель, начинающийся с терминала, но не от Jenkins

Но у меня возникает проблема, когда я пытаюсь сделать то же самое через Дженкинса. Я добавил, что VM как раб на Дженкинсе, и я запускаю тот же сценарий из опции Jenkins Execute Shell. Консольный вывод Jenkins показывает, что слушатель запущен, а ps -ef | grep tnsl показывает, что слушатель поднят, но только до тех пор, пока работает сценарий Jenkins. Как только сборка Jenkins завершится, ps -ef | grep tnsl не покажет результаты.

Я пытался отлаживать это на некоторое время. Может ли кто-нибудь проливать свет здесь? Я понимаю, что вопрос может показаться расплывчатым при первом прочтении, но я рад предоставить любую информацию, которую любой сочтет необходимой.

+1

Вы можете демон его 'демон -E BUILD_ID = dontKillMe/путь/к/скрипту '. Подробнее см. В разделе «Истерирование процессов из сборки» (https://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build). –

ответ

1

Как упоминалось в this answer к аналогичному вопросу, часы Jenkins ProcessTreeKiller для порожденных процессов и исключают их, чтобы избежать зомби.

Чтобы отключить это поведение для определенного задания, измените переменную среды BUILD_ID, которую ищет ProcessTreeKiller. Например:

BUILD_ID=dontKillMe /my/database/listener/script.pl 

В качестве альтернативы, функция может быть может быть отключена для всех заданий, когда Дженкинс запускаемые:

java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war 
Смежные вопросы