2014-05-24 14 views
5

Tôi có một công việc định kỳ đơn giản bên trong cPanel chạy mỗi 2 phút:Chạy cron công việc mỗi 2 phút trừ những phút đầu tiên "0" của giờ "0" đầu tiên

*/2 * * * * 

Theo mặc định "0" phút là khởi đầu của công việc cron như 0,2,4,6,8,10 vv ...

Làm thế nào để bỏ qua "0" phút của "0" giờ (12AM) trong cron? Tôi làm điều này bởi vì cron này phụ thuộc vào cron khác chạy một lần mỗi ngày vào lúc 12 giờ sáng. Vì vậy, tôi không muốn họ chồng lên nhau.

Tóm lại, tôi cần cron này chạy 2 phút một lần ngoại trừ 00:00 lúc 12:00 sáng.

+2

Để người nào đó bỏ phiếu, tại sao ?? Nếu bạn không có câu trả lời, chỉ cần bỏ qua thay vì vô nghĩa này xin vui lòng! –

+0

Cách tốt nhất để xử lý một cái gì đó như thế này là có cron job chạy mỗi 2 phút, nhưng điều chỉnh logic trong script của bạn (PHP?) Chỉ đơn giản là không chạy ở đầu giờ trong bất kỳ trường hợp nào. – JakeGould

+0

@JakeGould đó là những gì tôi đã làm nhưng tôi nghĩ rằng nên có một cách để làm điều đó bằng cách sử dụng cron. –

Trả lời

12

Đây là công việc định kỳ của bạn:

*/2 * * * * 

Nhưng sau đó bạn trạng thái:

Làm thế nào để bỏ qua "0" phút "0" giờ (00:00) trong cron? Tôi làm điều này vì cron này phụ thuộc vào một cron khác chạy một lần mỗi ngày lúc 12 giờ sáng. Vì vậy, tôi không muốn họ chồng lên nhau.

Sự cố không phải là công việc cron mà là logic lôgic của bạn. Có lẽ bạn có thể làm một cái gì đó như tạo ra một loại chỉ số trong công việc đầu tiên mà công việc thứ hai sẽ tiếp tục để họ không xung đột.

Có lẽ bạn chỉ nên thay đổi cron của bạn là không thanh nha, nhưng cụ thể của mỗi 2 phút như thế này:

2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * 

Một khái niệm sẽ được kết hợp một khoảng thời gian (2-58) với một tần số (*/2), nhưng không rõ ràng nếu điều này có thể làm việc.

2-58/2 * * * * 

EDIT: Theo những nhận xét trái bởi các poster ban đầu:

Nói tóm lại, tôi cần cron này để chạy mỗi 2 phút trừ 00:00.

Nếu đó là trường hợp, bạn có thể phải thiết lập một kết hợp của công việc cron như thế này:

*/2 1-23 * * * 
2-58/2 0 * * * 

Mục cron đầu tiên sẽ chạy công việc mỗi 2 phút từ 01:00 đến 11: 00:00.

Mục nhập cron tiếp theo sẽ chạy công việc sau mỗi 2 phút từ 2-58 phút chỉ vào lúc nửa đêm. Vì công việc thứ hai này bỏ qua 0 trong thời gian 0 giờ nửa đêm, kết hợp này sẽ phù hợp với bạn. Nhưng điều đó nói rằng, loại logic nhập kép này là lý do tại sao nó thực sự khuyến khích các nhà phát triển mở rộng logic ứng dụng của họ để tránh các tình huống nhất định mà nó sẽ không hoạt động.

Ví dụ: tôi có một số tập lệnh bash tạo tệp khóa trong thư mục Unix /tmp tiêu chuẩn.Chúng được thiết lập để chạy mỗi 5 phút, nhưng bản thân kịch bản có logic để đảm bảo điều đầu tiên nó làm trước khi bất cứ điều gì là để kiểm tra xem khóa đó có mặt hay không. Nếu khóa là có? Không làm gì cả. Nếu khóa không có ở đó, đi hạt!

+0

thực sự là "không có vấn đề". Tôi nghĩ rằng có phải là một cách để làm điều đó trong cú pháp cron tinh khiết. Chỉ hỏi thôi. Nếu tôi không nhận được câu trả lời, tôi sẽ tiếp tục thực hiện nó trong PHP như tôi đã là –

+0

@MichaelSamuel Cho đến nay tôi là câu trả lời duy nhất, và nếu bạn sẽ bị treo lên trên tôi bằng cách sử dụng từ "vấn đề" thì bạn cần lùi lại một bước. Nếu có một giải pháp tốt hơn, tôi vui mừng lên bầu nó. Nhưng câu trả lời của tôi bao gồm những gì tôi hiểu nhiệm vụ cron để có khả năng thực tế. – JakeGould

+1

Tôi đã tìm kiếm trước khi đăng câu hỏi này và nhận được rằng có thể làm điều gì đó như sau: '5-59/20 * * * *' sẽ chạy sau 5 phút sau, 25 phút sau và 45 phút sau đó. Nhưng đó là một nửa của giải pháp. Một nửa còn lại là cách bỏ qua giờ đầu tiên? Trong ngắn hạn, tôi cần cron này để chạy mỗi 2 phút ngoại trừ 12AM –

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