2013-06-10 30 views
18

Tôi nhận được lỗi này khi tôi cấu hình một công việc để làm dừng lại và bắt đầu của tomcat server:Process bị rò rỉ file descriptor lỗi trên JENKINS

Process bị rò rỉ file descriptor. Xem http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build để biết thêm thông tin

Khi tôi googled nó, tôi đã nhận một giải pháp được khuyến khích vì set BUILD_ID=dontKillMe
Đây có phải là giải pháp chính xác?
Nếu có, tôi cần đặt BUILD_ID ở đâu? Bên trong ant/post build script?
Có ai vui lòng làm rõ điều này không?

Trả lời

2

Bạn đang kêu gọi một lệnh từ Jenkins mà spawns một quá trình -
các tomcat-start lệnh kết thúc, nhưng trẻ em quy trình của nó vẫn chạy
(đây là tomcat web-server thực tế mà bạn cố gắng để bắt đầu).

Jenkins đôi khi xác định tình trạng này là một vấn đề có thể,
nhưng the page you have mentioned cũng giải thích làm thế nào để giải quyết nó
(trong ngắn hạn: Đừng bắt đầu tomcat từ Jenkins trừ khi bạn biết làm thế nào).

8

Thêm dòng này như một đối số JAVA_ARGS khi bạn khởi động máy chủ Jenkins của bạn (tôi đặt tôi vào/etc/default/Jenkins trong hộp Ubuntu của tôi)

-Dhudson.util.ProcessTree.disable=true 

Và bạn đã hoàn tất

+2

Tính năng này được đặt ra để ngăn chặn rò rỉ quy trình ngẫu nhiên từ các bản dựng. Tắt hoàn toàn vì một công việc là nguy hiểm không cần thiết. –

12

Có , tạo ra giả BUILD_ID cho quá trình cho Jenkins bỏ qua quá trình này trong quá trình phát hiện các quá trình sinh sản, do đó quá trình này sẽ không bị giết sau khi hoàn thành công việc.

Cách sử dụng: Nhập BUILD_ID=dontKillMe trước khi lệnh của bạn, ví dụ vào Execute shell xây dựng bước:

BUILD_ID=dontKillMe nohup ./yourStartScript.sh & 

Lưu ý: Xem thêm nohup

+0

nó không làm việc cho tôi trong một bước xây dựng ... Tôi tin rằng nó nên được biến môi trường – Vytalyi

+1

@Vytalyi tôi thêm BUILD_ID xuất khẩu = dontKillMe và nó làm việc cho tôi. – tintin

+0

những gì nên được viết cho các cửa sổ? và ở đâu ? –

1

Theo mặc định, Jenkins sẽ giết chết tất cả các quá trình sinh ra khi hoàn thành xây dựng .

Để ghi đè điều này, bạn cần phải tạo biến môi trường BUILD_ID.

Đi tới Jenkins -> Quản lý Jenkins -> Cấu hình hệ thống Bây giờ trong phần 'Thuộc tính chung', trong Biến môi trường, hãy nhấp vào nút THÊM để thêm biến môi trường mới. Đặt tên = BUILD_ID và giá trị = 'allow_to_run_as_daemon start_my_service' (không có báo giá). Nhấp vào nút lưu. Và bạn đã xong.

Bây giờ quá trình sinh sản sẽ tiếp tục thực hiện ngay cả sau khi quá trình xây dựng hoàn tất.

+0

Điều này đã giải quyết được vấn đề của tôi. +1 –

Các vấn đề liên quan