2009-04-01 39 views

Trả lời

-1

Bạn có thể sử dụng để tạo ra một crontab chạy trong khoảng thời gian cụ thể:

http://www.robertplank.com/cron/

Hoặc này

http://www.webmaster-toolkit.com/cron-generator.shtml

Một giải pháp sẽ được thiết lập 6 crons, 1 cho mỗi tháng, mỗi tháng sẽ chạy lúc 7 giờ sáng mỗi ngày trong tháng đó.

Đây có lẽ là cách dễ nhất, bước tiếp theo sẽ là viết kịch bản.

-1

Không, afaik, bạn không thể làm điều đó.

Các trường cron giữ giá trị theo phút, giờ, ngày trong tháng, tháng và ngày trong tuần tương ứng.

10 5 10 * * means run at 5:10 on every 10th of every month. 

10 5 * 12 * means run at 5:10 on every day in december 

10 5 * * 1 means run at 5:10 every Monday 

Bạn có thể làm cho nó chạy trên một chuỗi tháng cụ thể vì định dạng crontab chấp nhận phạm vi. Từ tháng 4 đến tháng 12 sẽ là 4-12 trong trường hợp đó cho trường tháng. Nhưng điều đó không tính đến mong muốn của bạn cho việc này giới hạn trong năm 2009.

Không có cơ chế để đặt ngày bắt đầu và ngừng cho cronjob. Bạn luôn có thể viết kịch bản này tất nhiên. Làm cho cronjob chạy mỗi ngày và kiểm tra ngày hiện tại trước ngày 30/12. Nếu nó là 31/12 làm cho nó loại bỏ chính nó. Hoặc một cái gì đó nhiều hơn suy nghĩ thông qua.

Một crontab của

0 7 * * 6-12 command_X 

sẽ làm những gì bạn muốn một phần, nhưng nó sẽ bắt đầu từ 01 tháng sáu và chạy thông qua ngày 31 Tháng Mười Hai. Bỏ qua phần đầu tiên của tháng 6 và ngày 31 tháng 12 sẽ phải được viết trong lệnh X.

14

có thể được thực hiện theo cách thức khó khăn.

Bạn cần ba cron công việc riêng biệt cho phạm vi đó, tất cả chạy cùng mã (X trong trường hợp này):

  • một cho ngày 29 và ngày 30 tháng 6 ("0 7 29,30 6 * X").
  • một cho mỗi ngày trong các tháng từ tháng 7 đến tháng 11 ("0 7 * 7-11 * X").
  • một cho tất cả trừ ngày cuối cùng trong tháng 12 ("0 7 1-30 12 * X").

này mang đến cho bạn:

# Min Hr DayOfMonth Month DayOfWeek Command 
# --- -- ---------- ----- --------- ------- 
    0  7  29,30  6  *   X 
    0  7   *  7-11  *   X 
    0  7  1-30  12  *   X 

Sau đó, hãy chắc chắn bạn nhận xét chúng ra trước khi 29 tháng 6 năm 2010 đến xung quanh.Bạn có thể thêm công việc cuối cùng cron vào ngày 31 tháng 12 để gửi email cho bạn rằng công việc đó cần phải bị vô hiệu hóa.

Hoặc bạn có thể sửa đổi X để thoát ngay lập tức nếu năm không phải là 2009.

if [[ "$(date +%Y)" != "2009" ]] ; then 
    exit 
fi 

Sau đó, nó sẽ không vấn đề gì nếu bạn quên để vô hiệu hóa các công việc.

4

Có, chủ yếu. Một số cron triển khai có hỗ trợ trong nhiều năm, một số thì không, vì vậy chúng tôi sẽ giả định của bạn không. Ngoài ra, tôi giả định rằng công việc này chỉ được chạy bởi cron daemon, vì vậy chúng ta có thể sử dụng bit thực thi để xác định liệu cron có nên chạy công việc hay không.

Lưu ý rằng bạn sẽ cần phải rời khỏi tập lệnh của mình dưới dạng không thể chạy được cho đến khi bạn muốn nó chạy.

Các biểu thức cron sau sẽ làm những gì bạn muốn (mỗi ngày, kể cả ngày cuối tuần). Tinh chỉnh khi bạn cần:

# Make the job executable on 29 June. 
0 6 29 6 * chmod +x /path/to/my/job/script 

# Run the job between June and December, only if it's executable. 
0 7 * 6-12 * test -x /path/to/my/job/script && /path/to/my/job/script 

# Disable execution after 30 December. 
0 8 30 12 * chmod -x /path/to/my/job/script 
2

Tôi thường là người hâm mộ giữ logic với chương trình đang chạy. Bạn có thể nghĩ về việc thiết lập một công việc cron chạy kịch bản mỗi ngày, sau đó có kịch bản tự quyết định có nên làm bất cứ điều gì hữu ích hay không. Khi ngày hữu ích cuối cùng (ngày 30 tháng 12) trôi qua, kịch bản của bạn có thể tự xóa khỏi crontab. Trong kịch bản, bạn có thể thiết lập logic với tất cả các ý kiến ​​cần thiết để mô tả những gì bạn đang làm và tại sao.

Nếu công việc của bạn là một chương trình nhị phân, bạn có thể thiết lập một run_script mà lịch trình này lọc làm việc trước khi gọi chương trình.

+1

Tôi sẽ phải không đồng ý - mặc dù nó phụ thuộc một chút vào việc bạn cho rằng chương trình sẽ phục vụ một mục đích khác hơn khi chạy qua cron (và Unix geeks giả định rằng nó sẽ). Nếu nó phục vụ một mục đích chung, thì hãy xây dựng trong một bộ quy tắc phức tạp để quyết định khi nào nên chạy hoặc phân tích cú pháp tệp cấu hình là quá mức cần thiết và không được đề xuất (trừ khi, có thể, bạn đã có công cụ trong thư viện của mình để thực hiện kiểm tra). Tốt hơn nhiều để cho 'cron' hoặc một biến thể đối phó với điều đó! –

+0

Tôi đã thực sự tìm kiếm một cách để thực hiện một công việc cron cho đến ngày hết hạn, có thể tạo một công việc thứ hai để loại bỏ cả hai, cho đến khi tôi đỏ chữ của bạn về "kịch bản tự quyết định có nên làm bất cứ điều gì hữu ích không". Thay vì tạo ra một loạt các công việc, tôi sẽ chỉ tạo một công việc để gọi kịch bản của tôi mỗi ngày và nó sẽ quyết định nếu có điều gì đó để làm. – StackUnder

Các vấn đề liên quan