29

I am getting this error when I configured a job to do stop and start of tomcat server:

Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information

When i googled it, i got a recommended solution as set BUILD_ID=dontKillMe
Is this the exact solution?
If yes, where do I need to set BUILD_ID? Inside ant/post build script?
Can anyone please clarify this?

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
user2181104
  • 295
  • 1
  • 3
  • 4

5 Answers5

16

Yes, creating fake BUILD_ID for process tells Jenkins to ignore this process during detection spawned processes, so this process will be not killed after finishing job.

Usage: Enter BUILD_ID=dontKillMe before your command, for example into Execute shell build step:

 BUILD_ID=dontKillMe nohup ./yourStartScript.sh &

Note: See also nohup

Arpit Aggarwal
  • 27,626
  • 16
  • 90
  • 108
lu_ko
  • 4,055
  • 2
  • 26
  • 31
11

By default, Jenkins will kill all the spawned process at the completion of build.

To override this, you need to create environment variable BUILD_ID.

Go to Jenkins -> Manage Jenkins -> Configure System.

Now under Global properties section, under Environment variables, click on ADD button to add new Environment variable. Give name=BUILD_ID and value=allow_to_run_as_daemon start_my_service
Click on save button. And you are done.

Now the spawn process will continue to execute even after the build got completed.

NK.
  • 111
  • 1
  • 5
6

Add this line as a JAVA_ARGS argument when you start your jenkins server (I put mine on /etc/default/jenkins in my Ubuntu box)

-Dhudson.util.ProcessTree.disable=true

And you're done

Arx Cruz
  • 115
  • 1
  • 3
  • 10
    The feature is in place to prevent accidental process leak from builds. Turning it off entirely because of one job is unnecessarily dangerous. – Oliver Gondža May 16 '16 at 12:05
3

You are calling a command from Jenkins that spawns another process -
the tomcat-start command ends, but its child-process is still running
(this is the actual tomcat web-server you attempted to start).

Jenkins sometimes identifies this situation as a possible problem,
but the page you have mentioned also explains how to solve it
(in short: Don't start tomcat from Jenkins unless you know how).

Gonen
  • 4,005
  • 1
  • 31
  • 39
1

Tried different suggestions but none of the options worked for me. Finally I switched to previous version of jenkins and it worked. I switched from 2.3 to 1.581 and it worked.

MIM
  • 499
  • 3
  • 11
  • 30