Cần sắp xếp công việc mỗi giờ trong jenkins


16

Tôi mới đến Jenkins. Tôi có một công việc mà tôi cần lên lịch mỗi 1 giờ.

tôi đang dùng

* */1 * * * 

nhưng nó không hoạt động hiệu quả.

Vui lòng cung cấp bất kỳ giải pháp khác.


3
bạn nên giải thích những gì "nhưng nó không hoạt động hiệu quả." có nghĩa. Và thêm vào các mục distro & cronttab của bạn
Sathyajith Bhat

sử dụng @hourlyhoặc0 * * * *
Renju Chandran chingath

Cảm ơn. Hãy đề cập đến cú pháp, nếu tôi muốn lên lịch cứ sau 3 giờ.
Ajay

Sử dụng: H / 60 * * * *
Eyal Sooliman

Câu trả lời:


31

Jenkins sử dụng biểu thức cron như được giải thích ở đây

Để lên lịch mỗi giờ, sau đó bạn có thể đặt

0 * * * *

Sau đó, công việc của bạn sẽ được thực hiện mỗi giờ (07:00, 08:00, 09:00, v.v.)

CẬP NHẬT

Theo giải thích về cấu hình ban đầu của bạn, cú pháp

* */1 * * *

sẽ thực hiện công việc mỗi phút.

CẬP NHẬT 2

Theo yêu cầu trong bình luận, ở đây cú pháp để lên lịch cho nó cứ sau 3 giờ

0 */3 * * *

Cú pháp */ncó nghĩa là các công việc sẽ được lên lịch mỗi ngiờ


Cảm ơn câu trả lời. Nó hoạt động tốt. Nhưng công việc của tôi mất hơn một giờ để thực hiện. Chẳng hạn, nếu tôi muốn lên lịch cho công việc này cứ sau 3 giờ thì cú pháp sẽ chia sẻ.
Ajay

Kiểm tra câu trả lời cập nhật của tôi :)
masegaloeh

@Ajay Nếu câu trả lời này có tác dụng cho vấn đề của bạn, vui lòng xem xét để chấp nhận câu trả lời này :)
masegaloeh

14

Jenkins gợi ý cách này:

H * * * *

2
Câu trả lời tương tự như các câu trả lời khác cho câu hỏi đã hơn 1 năm tuổi.
JakeGould

Điều này trùng lặp một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có điều gì đó mới để đóng góp.
DavidPostill

4
Ưu điểm của phương pháp này là jenkins sẽ quản lý các nhiệm vụ trong hàng đợi. Có thể ai đó đã có câu trả lời nhưng nó vẫn hữu ích. Tại sao phải khắc nghiệt nếu nó hữu ích? câu trả lời với 20 lượt thích KHÔNG tốt lắm .... bah
juan Isaza

Tôi phải đi với @juanIsaza. Đây không phải là một bản sao nhưng thực sự là một câu trả lời tốt hơn. Jenkins rõ ràng đề nghị thích sử dụng Hthay vì các giá trị được mã hóa cứng
derHugo

9

Tôi biết đây là một chủ đề cũ nhưng tôi đang trả lời vì rõ ràng mọi người vẫn hạ cánh ở đây.

Câu trả lời hàng đầu không nên được sử dụng nữa.

Jenkins giới thiệu một giá trị H.

Trường này tuân theo cú pháp của cron (với sự khác biệt nhỏ). Cụ thể, mỗi dòng bao gồm 5 trường được phân tách bằng TAB hoặc khoảng trắng:

MINUTE GIỜ M DOMI THÁNG

  • PHÚT Phút trong vòng một giờ (0 Hóa59)
  • GIỜ Giờ trong ngày (0 Hóa23)
  • DOM Ngày trong tháng (1 Hàng31)
  • THÁNG Tháng (1 Vang12)
  • DOW Ngày trong tuần (0 trận7) trong đó 0 và 7 là Chủ nhật.

Để chỉ định nhiều giá trị cho một trường, các toán tử sau có sẵn. Theo thứ tự ưu tiên,

  • * chỉ định tất cả các giá trị hợp lệ
  • M-N chỉ định một phạm vi các giá trị
  • M-N/Xhoặc */Xcác bước theo các khoảng của X thông qua phạm vi được chỉ định hoặc toàn bộ phạm vi hợp lệ
  • A,B,...,Z liệt kê nhiều giá trị

Để cho phép các tác vụ được lên lịch định kỳ tạo ra tải đồng đều trên hệ thống, nên sử dụng ký hiệu H (cho băm băm). Ví dụ: sử dụng 0 0 * * * cho hàng tá công việc hàng ngày sẽ gây ra đột biến lớn vào nửa đêm. Ngược lại, sử dụng HH * * * vẫn sẽ thực hiện mỗi công việc một lần một ngày, nhưng không phải tất cả cùng một lúc, sử dụng các nguồn lực hạn chế tốt hơn.

Biểu tượng H có thể được sử dụng với một phạm vi. Ví dụ: HH (0-7) * * * có nghĩa là một khoảng thời gian từ 12:00 AM (nửa đêm) đến 7:59 AM. Bạn cũng có thể sử dụng các bước khoảng với H, có hoặc không có phạm vi.

Biểu tượng H có thể được coi là một giá trị ngẫu nhiên trong một phạm vi, nhưng thực tế nó là hàm băm của tên công việc, không phải là hàm ngẫu nhiên, do đó giá trị vẫn ổn định cho bất kỳ dự án cụ thể nào.

Xin lưu ý rằng đối với trường ngày của tháng, các chu kỳ ngắn như * / 3 hoặc H / 3 sẽ không hoạt động ổn định vào gần cuối hầu hết các tháng, do độ dài tháng thay đổi. Ví dụ: * / 3 sẽ chạy vào các ngày 1, 4, Ngày 31 của một tháng dài, sau đó lại vào ngày tiếp theo của tháng tiếp theo. Băm luôn được chọn trong phạm vi 1-28, vì vậy H / 3 sẽ tạo ra khoảng cách giữa các lần chạy trong khoảng từ 3 đến 6 ngày vào cuối tháng. (Các chu kỳ dài hơn cũng sẽ có độ dài không nhất quán nhưng hiệu quả có thể tương đối ít chú ý hơn.)

Vì vậy, câu trả lời đúng cho việc xây dựng mỗi giờ một lần là

H * * * *

cứ sau 3 giờ

H H/3 * * *

Sự khác biệt giữa *Hcũng có thể được giải thích là

  • *dịch sang MERYI
  • Hdịch sang BẤT K

Vì vậy, ví dụ

* * * * *

dịch thành: Xây dựng mỗi phút, mỗi giờ, mỗi ngày trong tháng, mỗi tháng, không quan trọng là ngày nào trong tuần.

H * * * *

dịch sang: Xây dựng một lần mỗi giờ (x), không quan trọng là phút chính xác là bao nhiêu (có thể là bất kỳ phút nào giữa x: 00 và x: 59)

H H * * *

dịch sang: Xây dựng một lần mỗi ngày, không quan trọng là mấy giờ (có thể là bất kỳ phút nào và bất kỳ giờ nào trong khoảng thời gian từ 00:00 đến 23:59)


Lý do tại sao bạn nên sử dụng Hthay vì giá trị thời gian được mã hóa cứng cũng được giải thích như trước

Nếu bạn có 100 công việc được cấu hình với

0 0 * * *

tất cả họ sẽ cố gắng bắt đầu cùng một lúc, ví dụ như rất nhiều cuộc thăm dò và kéo lưu lượng truy cập vào nửa đêm.

Nếu bạn có chúng thay vì tất cả được cấu hình với

H H * * *

tất cả chúng sẽ được xây dựng một lần một ngày nhưng không phải tất cả cùng một lúc mà được phân phối trong ngày.


Lịch trình phạm vi thời gian

Bạn có thể lập kế hoạch phân loại tốt hơn bằng cách sử dụng các khoảng thời gian, vd

H H(18-23) * * *

Tất cả các công việc sẽ được xây dựng mỗi ngày bất cứ lúc nào trong khoảng thời gian từ 18:00 đến 23:59.


Lịch trình phạm vi thời gian vượt qua nửa đêm

Thậm chí còn có thể sắp xếp các công việc xuyên suốt nửa đêm, ví dụ như xây dựng trong khoảng thời gian từ 19:00 đến 5:00 sáng.

Nhưng vì cron thường không cho phép điều này, bạn có thể sử dụng một mẹo sử dụng múi giờ shiftet.

Ví dụ: tôi đang sống ở múi giờ MEZ là GMT + 1 và tôi muốn xây dựng tất cả các công việc trong khoảng thời gian từ 19:00 đến 5:00 sáng. Để làm được điều đó, tôi thay đổi múi giờ hoàn chỉnh của mình thêm 5 giờ bằng cách sử dụng

TZ=Etc/GMT+6

Hơn tôi sử dụng phạm vi dịch chuyển trong giờ bắt đầu lúc 14:00 (-> +5 = 19:00 tối) và kết thúc lúc 23:59 (-> +5 = 4:59 sáng)

H H(14-23) * * *

-1
* */1 * * *

là chính xác nó chạy mỗi giờ

Hãy thử sử dụng chức năng H để tất cả các công việc không thăm dò cùng lúc với svn

H H/1 * * *

Nó nên làm phép thuật. Nếu công việc mất nhiều thời gian hơn để hoàn thành hoặc bạn đang thực hiện chức năng kích hoạt xây dựng. Tăng thời gian hoặc sử dụng plugin jenkins để dừng xây dựng cho đến khi quá trình xây dựng trước kết thúc.

https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin


Cái đầu tiên chạy mỗi phút trong khoảng từ 1:00 sáng đến 2:00 sáng, phải không?
Eric Wang

@EricWang: Không. Nó giống như * * * * *=> chạy mỗi phút. Để chạy ở giữa một phạm vi nhất định, bạn sử dụng nó như * 1-2 * * *<- điều này chạy mỗi phút trong khoảng thời gian từ 1:00 sáng đến 1:59 sáng
derHugo

@derHugo Ý bạn là * * 1-2 * *gì?
Eric Wang

1
@EricWang Không có ý tôi * 1-2 * * *. Vị trí đầu tiên là cho Minute of our, vị trí thứ hai cho hour of day, thứ ba day of month, thứ tư month of yearvà thứ năm day of week(trong trường hợp đặc biệt, nó cũng cho phép vị trí thứ sáu year). Vì vậy, dòng của bạn * * 1-2 * *dịch "Mỗi phút, mỗi giờ, ngày đầu tiên và thứ hai hàng tháng và bất kỳ ngày nào trong tuần.
derHugo

1
Sự khác biệt mà tác giả của câu trả lời này đã bỏ lỡ là *dịch sang everytrong khi Hdịch sang any. Vì vậy, trong khi * * * * *có nghĩa là mỗi phút, H * * * *có nghĩa là xây dựng một lần mỗi giờ nhưng tôi không quan tâm đến phút chính xác (có thể là bất kỳ nơi nào trong khoảng 0-59 nếu không được xác định bởi một phạm vi) và H H * * *có nghĩa là xây dựng một lần mỗi ngày nhưng tôi không quan tâm đến thời gian.
derHugo

-5

Cú pháp là:


MINUTE  Minutes within the hour (0-59)
HOUR    The hour of the day (0-23)
DOM     The day of the month (1-31)
MONTH   The month (1-12)
DOW     The day of the week (0-7) where 0 and 7 are Sunday.

Nếu bạn muốn lên lịch cho mỗi 3 giờ, cú pháp sẽ trông:

* 3 * * * *

4
Điều này sẽ sắp xếp cho 03:00 mỗi ngày, và không phải tất cả 3 giờ
lony
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.