Tôi cần tìm cách để cron một công việc để nó chạy mỗi thứ tư thứ hai trong tháng. Điều này có thể không?
Tôi cần tìm cách để cron một công việc để nó chạy mỗi thứ tư thứ hai trong tháng. Điều này có thể không?
Câu trả lời:
Trang web của tôi cho crontab (mà tôi buồn bã dường như không thể tìm thấy trực tuyến) đưa ra ví dụ sau:
# Run on every second Saturday of the month
0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
Thích ứng điều này với mục đích của bạn ...
0 4 8-14 * * test $(date +\%u) -eq 3 && job.sh
*), lệnh sẽ chạy khi một trong hai khớp .
date +\%u
Bạn có thể tránh chạy tập lệnh bên ngoài bằng cách sử dụng kết hợp thủ thuật ngày trong tuần cộng với ngày trong tuần:
# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh
Điều này cũng tránh chạy một chương trình bên ngoài khác. 8-14 chọn tất cả các ngày phù hợp với tuần thứ hai của tháng. Sau đó, nó sẽ lọc ra vào thứ Tư.
Không thể tự mình sử dụng cron, nhưng bạn có thể gọi một tập lệnh mỗi tuần một lần để thực hiện kiểm tra:
Trong crontab, chạy second_wed.sh vào lúc 12:00 mỗi thứ Tư:
0 12 * * 3 /home/you/bin/second_wed.sh
Trong second_wed.sh:
#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
# Call your program here instead of 'ls'…
ls
fi
Đối với máy chủ CentOS 7, đây dường như là cú pháp phù hợp với tôi. Xin lưu ý các không gian xung quanh [và ]. Điều đó mất một lúc để tôi tìm ra.
Điều này chạy test.shtệp vào lúc 13:07 / 1:07 chiều vào Thứ Tư thứ hai của tháng. (0 = Chủ nhật, 1 = Thứ hai, 2 = Thứ ba, 3 = Thứ tư, v.v.)
07 13 8-14 * * [ `date +\%u` = 3 ] && /root/scripts/test.sh
Cháy vào lúc 10:15 sáng thứ Sáu thứ ba hàng tháng: 0 15 10 ? * 6#3
Nguồn: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htmlm