Làm sao viết cronjob để chạy vào ngày cuối cùng của tháng?

Bài này là bài hướng dẫn mình tổng kết lại từ công việc.

Có đôi lúc mình sẽ cần viết một script chạy vào ngày cuối cùng của tháng, ngày đó thể là 28/29(tháng 2) hoặc 30/31(các tháng còn lại)

Vậy làm sao để xác định chính xác ngày cuối cùng của tháng là ngày bao nhiêu để chỉnh cronjob?

Đơn giản, chỉ cần tính xem ngày mai có phải là ngày 1 hay không là được. Với command sau mình sẽ có được ngày mai

echo $(date +\%d -d tomorrow)

Ví dụ hôm nay là 20 thì kết quả của lệnh trên sẽ trả ra 21.

Để tạo cronjob chay vạo lúc 2h30 sáng ngày 1 mỗi tháng ta có thể viết như sau

30 2 28-31 * * root [ $(date +\%d -d tomorrow) = 01 ] && bash script_can_chay.sh

Mở rộng: Nếu mình muốn chạy vào 3 ngày trước đầu tháng thì sao?

Trả lời: mình sửa lại cái lệnh tính ngày ở trên. Thay tomorrow bằng “3 days”

Nếu hôm nay là 20 thì lệnh sau sẽ trả ra 23

echo $(date +\%d -d "3 days")

Thay kết quả này vào lệnh cronjob kia thì mình sẽ chạy được vào 3 ngày trước đầu tháng :slight_smile:

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?