Làm thế nào tôi có thể có một công việc định kỳ để chạy cứ sau 30 phút?


224

Tôi đang tìm cách thêm một crontabmục để thực thi một kịch bản cứ sau 30 phút, vào giờ và 30 phút sau giờ hoặc một cái gì đó gần. Tôi có những điều sau đây, nhưng nó dường như không chạy trên 0.

*/30 * * * *

Tôi cần sử dụng chuỗi nào?

Cron đang chạy trên OSX.


Bạn đã thành công trong việc khiến crontab của bạn hoạt động? Vấn đề của bạn có thể không phải là crontab, nhưng làm cho nó được sử dụng.
Eddie

Nó đang chạy 2 tập lệnh khác, mỗi tập một phút.
Darryl Hein

1
Tôi đang chờ xem liệu một trong những câu trả lời dưới đây có hoạt động không, chỉ cần đợi đến 30 phút tiếp theo là hết ... trong 3 phút.
Darryl Hein

2
... Bạn không thể thay đổi 0,30 thành 0,5? Nếu 0,5 hoạt động, tại sao sẽ không 0,30?
George Stocker

1
Bạn không bao giờ nói với chúng tôi nếu nó làm việc đúng giờ!
Eddie

Câu trả lời:


487

Làm:

0,30 * * * * your_command

1
Hoạt động tuyệt vời! Trong CentOS crontab, tôi đã phải làm một cái gì đó giống như 0,30 * * * * root your_commandroot mà người dùng tôi đang sử dụng.
prograhammer

@prograhammer - Đây có phải là một phần của crontab gốc hoặc một số crontab của người dùng khác không?
Muhamed Huseinbašić

@ MuhamedHuseinbašić câu hỏi hay, vì có 2 crontabs khác nhau (một toàn cầu và sau đó là một người dùng). Tôi sẽ phải kiểm tra và xem ...
prograhammer

100

crontab không hiểu "khoảng", nó chỉ hiểu "lịch trình"

giờ hợp lệ: 0-23 - phút hợp lệ: 0-59

ví dụ 1

30 * * * * your_command

điều này có nghĩa là "chạy khi số phút của mỗi giờ là 30 " (sẽ chạy vào lúc: 1:30, 2:30, 3:30, v.v.)

ví dụ # 2

*/30 * * * * your_command

điều này có nghĩa là "chạy khi phút của mỗi giờ chia hết cho 30 " (sẽ chạy vào lúc: 1:30, 2:00, 2:30, 3:00, v.v.)

ví dụ # 3

0,30 * * * * your_command

điều này có nghĩa là "chạy khi phút của mỗi giờ là 0 hoặc 30 " (sẽ chạy vào lúc: 1:30, 2:00, 2:30, 3:00, v.v.)

đó là một cách khác để thực hiện các kết quả tương tự như ví dụ # 2

ví dụ số 4

19 * * * * your_command

điều này có nghĩa là "chạy khi phút của mỗi giờ là 19 " (sẽ chạy vào lúc: 1:19, 2:19, 3:19, v.v.)

ví dụ số 5

*/19 * * * * your_command

điều này có nghĩa là "chạy khi phút của mỗi giờ chia hết cho 19 " (sẽ chạy vào lúc: 1:19, 1:38, 1:57, 2:19, 2:38, 2:57, v.v.)

lưu ý: một số tinh chỉnh đã được thực hiện cho bài đăng này bởi nhiều người dùng bao gồm cả tác giả


76

Thử cái này:

0,30 * * * * your command goes here

Theo trang web chính thức của Mac OS X crontab (5) , /cú pháp được hỗ trợ. Do đó, để tìm hiểu lý do tại sao nó không hiệu quả với bạn, bạn sẽ cần xem nhật ký cho cron. Trong các bản ghi đó, bạn sẽ tìm thấy một thông báo thất bại rõ ràng.

Lưu ý: Mac OS X dường như sử dụng Vixie Cron, giống như Linux và BSD.


Tôi đã luôn sử dụng * / 30 thành công nhưng tôi không nhớ lại một ứng dụng của mình, nơi nó quá quan trọng nếu nó chỉ chạy một lần một giờ vì vậy tôi không nghĩ mình đã từng kiểm tra.
Adam Hawes

2
@Adam Hawes: Trước đây tôi cũng đã sử dụng * / xx thành công, nhưng trên Linux và các UNIX khác. Cá nhân tôi chưa dùng thử Mac OSX. Câu hỏi ban đầu không nói hệ điều hành nào. Một số UNIX cũ không hỗ trợ * / xx
Eddie

Câu trả lời của bạn cũng có hiệu quả, nhưng Vlad có ít đại diện hơn, vì vậy tôi đã cho anh ấy điểm.
Darryl Hein

1
@DarrylHein lol, Hôm nay Eddie có ít đại diện hơn :-p. Tôi ủng hộ Eddie.
beginer

10

Nếu công việc định kỳ của bạn chỉ chạy trên Mac OS X, bạn có thể muốn sử dụng launchd thay thế.

Từ lập kế hoạch thời gian công việc (tài liệu chính thức của Apple) :

Lưu ý: Mặc dù nó vẫn được hỗ trợ, cron không phải là giải pháp được đề xuất. Nó đã không được ủng hộ trong launchd.

Bạn có thể tìm thấy thông tin bổ sung (chẳng hạn như trang Wikipedia launchd ) với một tìm kiếm web đơn giản.


5

Bạn đề cập đến việc bạn đang sử dụng OS X- Tôi đã sử dụng cronnix trong quá khứ. Nó không táo tợn như tự chỉnh sửa nó, nhưng nó giúp tôi tìm hiểu những gì các cột trong nháy mắt. Chỉ là một ý nghĩ.


Điều này có thể hữu ích nếu không là tốt.
Darryl Hein

3

Bạn có thể sử dụng cả hai biểu tượng ' , ' HOẶC chia ' / '.
Nhưng, ' / ' là tốt hơn.
Giả sử trường hợp 'cứ sau 5 phút'. Nếu bạn sử dụng ' , ', bạn phải viết công việc định kỳ như sau:

0,5,10,15,20,25,30,35,....    *      *     *   * your_command

Nó có nghĩa là chạy your_command mỗi giờ trong tất cả các phút được xác định: 0,5,10, ...

Tuy nhiên, nếu bạn sử dụng '/', bạn có thể viết công việc đơn giản và ngắn sau:

*/5  *  *  *  *  your_command

Điều này có nghĩa là chạy your_command trong vài phút có thể chia cho 5 hoặc bằng những từ đơn giản hơn, '0,5,10, ...'

Vì vậy, biểu tượng có thể chia 'luôn luôn là lựa chọn tốt nhất;

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.