CronJob cứ sau 25 phút


13

Tôi muốn biết liệu có cách nào dễ dàng hơn để điều hành công việc cứ sau 25 phút không. Trong cronjob, nếu bạn chỉ định tham số phút là * / 25, thì nó sẽ chỉ chạy vào phút thứ 25 và 50 mỗi giờ

Câu trả lời:


15

Lệnh trong crontab được thực thi với /bin/shđể bạn có thể sử dụng mở rộng số học để tính xem liệu modulo phút hiện tại 25 có bằng không:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronsẽ chạy toàn bộ mục nhập này cứ sau 5 phút, nhưng chỉ khi phút hiện tại (tính bằng phút kể từ kỷ nguyên) modulo 25 bằng 0 thì nó sẽ chạy your_command.

Như những người khác đã chỉ ra, 1 ngày không chia hết cho 25 phút, do đó, điều này sẽ không gây ra your_commandchạy cùng một lúc mỗi ngày, nhưng nó sẽ chạy cứ sau 25 phút.


chỉ đơn giản là vui tính ...
Tomas

Lưu ý rằng với việc triển khai cron từ ISC, ít nhất bạn sẽ cần thoát% ký tự đó bằng dấu gạch chéo ngược.
Stéphane Chazelas

@ StéphaneChazelas, điểm tốt. Tôi đã đi trước và thêm dấu gạch chéo ngược trước dấu hiệu phần trăm bởi vì theo hiểu biết của tôi, mỗi lần thực hiện cron đều yêu cầu điều này.
MÃ-REaD

7

Đặt cược tốt nhất của bạn là chạy ở 20 phút hoặc 30 phút.

Điều tốt nhất tiếp theo của bạn có thể là kích hoạt cứ sau 5 phút, sau đó giữ số đếm nội bộ hoặc dấu thời gian và chạy mọi kích hoạt thứ 5 hoặc nếu 25 phút trôi qua kể từ lần chạy cuối cùng.

Phức tạp hơn sẽ là tính toán thời gian chính xác trong một ngày, bắt đầu từ nửa đêm và chấp nhận lỗi vào cuối ngày. Điều này sẽ liên quan đến việc sao chép mục crontab vào các giờ khác nhau.

Phức tạp hơn là sẽ tính toán thời gian trong cả tháng, bao gồm nhiều bản sao của mục crontab để bao gồm các kết hợp khác nhau.

Cuối cùng, bạn có thể tự thực hiện luôn trên daemon và thực hiện lập kế hoạch.


6

Tôi không có kinh nghiệm trực tiếp với nó, nhưng fcron dường như làm những gì bạn muốn ra khỏi hộp. Theo tài liệu của nó, bạn có thể chỉ định tần số:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

Bạn thấy 25 phút ở đâu?
Philomath

Sử dụng fcron và @ 25 commandnên làm thủ thuật.
Caleb

Cảm ơn Caleb. Tôi nên tạo một ví dụ phù hợp thay vì nâng thẳng từ tài liệu.
che2cbs

2

Hãy để tôi giải thích ngắn gọn vấn đề ở đây. Nhập 25 trong trường phút gây racron thực hiện khi số phút hiện tại bằng 25, tức là một lần một giờ. Bạn có thể nhập danh sách các trận đấu, vấn đề là 60 (phút của một giờ) không thể chia hết cho 25, vì vậy bạn cần thêm một vài mục dựa trên giờ. Bội số ít phổ biến nhất của 60 & 25 là 300, tức là 5 * 60. vì vậy bạn sẽ cần phải quay vòng trong 5 giờ cho đến khi trở về điểm bắt đầu ban đầu. ví dụ:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Nhưng ở đây một lần nữa, 24 (giờ một ngày) không thể chia hết cho 5, bội số chung ít nhất của 5 & 24 chỉ đơn giản là 5 * 24 = 120. và cứ thế ...


Có lẽ câu trả lời nên là một nhận xét về câu hỏi ban đầu.
Philomath

1

Bạn có thể chơi với thời gian sửa đổi cuối cùng của tệp

  • Tạo một tập lệnh nhỏ (ví dụ /usr/local/bin/age) sẽ xuất tuổi của tệp:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Crontab của bạn sẽ trông như thế này (giả sử 25 phút bằng 1500 giây nếu tôi đúng)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Lưu ý rằng tôi sử dụng /var/tmpthay /tmpvì vì theo FHS, nó không bị xóa khi tắt / khởi động hệ thống.


-2

Tôi nghĩ rằng sau đây nên làm việc 0 0/25 * * *?


Theo hiểu biết của tôi, nó sẽ hoạt động cho mỗi phút.

Điều đó sẽ thực hiện vào giờ một lần cứ sau ... 25 giờ? 25/11 ... thậm chí không chắc đó là gì nhưng đó không phải là OP sau đó.
Caleb
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.