2013-06-10 14 views
18

Ich erhalte diese Störung, wenn ich einen Job konfiguriert ist, um sie von Tomcatbediener stoppen und starten:Prozess durchgesickert Filedeskriptoren Fehler auf JENKINS

Prozess durchgesickert Dateideskriptoren. Siehe http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build für weitere Informationen

Wenn ich es gegoogelt, habe ich eine empfohlene Lösung als set BUILD_ID=dontKillMe
Ist dies die exakte Lösung?
Wenn ja, wo muss ich BUILD_ID setzen? Inside ant/post build script?
Kann jemand bitte dies klären?

Antwort

2

Sie einen Befehl von Jenkins aufrufen, die einen anderen Prozess laicht -
die tomcat-Start Befehl endet, aber sein Kind-Prozess noch läuft
(dies ist die eigentliche tomcat Web-Server, den Sie zu starten versucht,).

Jenkins identifiziert manchmal diese Situation als ein mögliches Problem,
aber the page you have mentioned auch erklärt, wie es
(kurz: Beginnen Sie nicht tomcat von Jenkins, es sei denn Sie wissen, wie) zu lösen.

8

diese Zeile als Argument JAVA_ARGS hinzufügen, wenn Sie Ihren jenkins-Server starten (Ich habe meine auf/etc/default/jenkins in meiner Ubuntu-Box)

-Dhudson.util.ProcessTree.disable=true 

Und Sie

+2

Die Funktion ist vorhanden, um versehentliche Prozesslecks von Builds zu verhindern. Es ist unnötig gefährlich, es wegen einer einzigen Aufgabe auszuschalten. –

12

getan Ja Erstellen von gefälschten BUILD_ID für Prozess sagt Jenkins, diesen Prozess während der Erkennung erzeugten Prozesse zu ignorieren, so wird dieser Prozess nach Beendigung des Jobs nicht getötet werden.

Verbrauch: BUILD_ID=dontKillMe, bevor Sie Ihren Befehl eingeben, zum Beispiel in Execute shell Build-Schritt:

BUILD_ID=dontKillMe nohup ./yourStartScript.sh & 

Hinweis: auch standardmäßig nohup

+0

es funktioniert nicht für mich in einem Build-Schritt ... Ich glaube, es sollte Umgebungsvariable sein – Vytalyi

+1

@Vytalyi Ich habe Export BUILD_ID = dontKillMe und es funktionierte für mich. – tintin

+0

Was sollte für Windows geschrieben werden? und wo ? –

1

Siehe, wird Jenkins alle erzeugten Prozess bei Beendigung des Build töten .

Um dies zu überschreiben, müssen Sie die Umgebungsvariable BUILD_ID erstellen.

Wechseln Sie zu Jenkins -> Jenkins verwalten -> System konfigurieren Klicken Sie nun im Bereich 'Globale Eigenschaften' unter Umgebungsvariablen auf Hinzufügen, um eine neue Umgebungsvariable hinzuzufügen. Geben Sie Name = BUILD_ID und value = 'allow_to_run_as_daemon start_my_service' (ohne Anführungszeichen). Klicken Sie auf Speichern. Und du bist fertig.

Jetzt wird der Spawn-Prozess weiter ausgeführt, auch nachdem der Build abgeschlossen wurde.

+0

Das hat mein Problem gelöst. +1 –