Cron để chạy mỗi thứ tư thứ hai?


9

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?

linux  cron 

1
Câu hỏi này có vẻ để cung cấp một câu trả lời thích hợp.
scurker

1
Vâng, nhưng câu hỏi đó là về Tue, không phải Wed;) Tuy nhiên, câu trả lời được chấp nhận là thông minh.
edoloughlin

>> Vâng, nhưng câu hỏi đó là về Tue, không phải Wed;) Câu trả lời được chấp nhận là thông minh, mặc dù ... thật khó để thay đổi Tue thành Wed?
ajreal

0 * * * 3 kiểm tra $ (ngày \ +% u) -eq 3 && echo "start run me" hãy thử điều này. đã không dán vào câu trả lời vì một câu hỏi lót khá mơ hồ.

Câu trả lời:


14

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

3
Đối với bất kỳ ai đang tìm cách chỉnh sửa câu trả lời này, lý do bạn không chỉ sử dụng trường ngày trong tuần là vì nếu cả ngày trong tháng và ngày trong tuần bị hạn chế (nghĩa là không *), lệnh sẽ chạy khi một trong hai khớp .
Hasturkun


1
Tôi thấy rằng tôi phải thoát% u, vì vậy:date +\%u
Antony D'Andrea

3

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ư.


1

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

1

Dựa trên câu trả lời này , bạn có thể làm:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh

1

Đố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 []. Đ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

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.