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.
@hourly
hoặc0 * * * *
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.
@hourly
hoặc0 * * * *
Câu trả lời:
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 */n
có nghĩa là các công việc sẽ được lên lịch mỗi n
giờ
Jenkins gợi ý cách này:
H * * * *
H
thay vì các giá trị được mã hóa cứng
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/X
hoặc*/X
cá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 *
và H
cũng có thể được giải thích là
*
dịch sang MERYIH
dịch sang BẤT KVì 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 H
thay 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.
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.
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 * * *
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
* * * * *
=> 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
* * 1-2 * *
gì?
* 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 year
và 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.
*
dịch sang every
trong khi H
dị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.
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 * * * *