Nếu bạn muốn chạy cron mỗi n
phút, có một vài tùy chọn khả thi tùy thuộc vào giá trị của n
.
n
chia 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)
Ở đây, giải pháp rất đơn giản bằng cách sử dụng /
ký hiệu:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
m-59/n * * * * command
Ở trên, n
đại diện cho giá trị n
và m
đại diện cho một giá trị nhỏ hơn n
hoặc *
. Điều này sẽ thực hiện lệnh vào phútm,m+n,m+2n,...
n
KHÔNG chia 60
Nếu n
không chia 60, bạn không thể làm điều này một cách sạch sẽ với cron nhưng nó có thể. Để làm điều này, bạn cần đặt một bài kiểm tra trong cron nơi bài kiểm tra kiểm tra thời gian. Điều này được thực hiện tốt nhất khi nhìn vào dấu thời gian UNIX, tổng số giây kể từ đó 1970-01-01 00:00:00 UTC
. Giả sử chúng ta muốn bắt đầu chạy lệnh lần đầu tiên khi Marty McFly đến Riverdale và sau đó lặp lại lệnh này mỗi n
phút sau đó.
% date -d '2015-10-21 07:28:00' +%s
1445412480
Đối với một cronjob chạy mỗi 42
phút thứ hai sau `` 2015-10-21 07:28:00 '', crontab sẽ trông như thế này:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
* * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command
với minutetestcmd
định nghĩa là
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
# return UTC time
now=$(date "+%s")
# get the amount of minutes (using integer division to avoid lag)
minutes=$(( (now - starttime) / 60 ))
# set the modulo
modulo=$2
# do the test
(( now >= starttime )) && (( minutes % modulo == 0 ))
Ghi chú: Thời gian UNIX không bị ảnh hưởng bởi giây nhuận
Ghi chú: cron
không có độ chính xác dưới giây