2009-10-21 34 views

Trả lời

20

Nếu bạn đang sử dụng Fabric cho deploment bạn có thể thêm một chức năng chỉnh sửa crontab của bạn.

def add_cronjob(): 
    run('crontab -l > /tmp/crondump')    
    run('echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump') 
    run('crontab /tmp/crondump') 

Điều này sẽ nối thêm một công việc vào crontab của bạn (từ chối trách nhiệm: hoàn toàn chưa được kiểm chứng và không phải là rất đáng giá).

  1. Lưu crontab vào tempfile.

  2. Nối một dòng vào tệp tmpfile.

  3. Viết lại crontab.

Đây không phải là chính xác những gì bạn muốn làm nhưng dọc theo những dòng bạn có thể nghĩ về kiểm tra crontab vào git và ghi đè lên máy chủ với mọi triển khai. (Nếu có một người sử dụng dành riêng cho dự án của bạn.)

+0

Thực tế, sử dụng lệnh chắp thêm của Vải không phải là không có giá trị nếu bạn sửa đổi dòng cron. Bạn sẽ kết thúc với dòng cũ cộng với dòng mới. – Dave

+2

Tôi đã phải thêm cú pháp để liệt kê crontab khi tạo/tmp/crondump, nếu không nó sẽ bị treo (trên Ubuntu atleast). (ví dụ: 'crontab -l>/tmp/crondump') – joet3ch

+0

Tôi đang sử dụng phương pháp này để cài đặt crontab trên máy chủ sản xuất của mình nhưng nó không hoạt động. Nó không có gì, mặc dù khi tôi 'SSH' vào máy chủ và kiểm tra' crontab -l', mọi thứ có vẻ ổn. Tôi đã nhận thấy rằng nếu tôi chỉnh sửa nó với 'crontab -e', ngay cả khi tôi chỉ thêm một khoảng trống vô nghĩa, khi tôi lưu tệp, nó nói" cài đặt crontab mới "và sau đó nó bắt đầu hoạt động. Bất kỳ ý tưởng tại sao điều này xảy ra? –

1

Bạn có thể sử dụng một cái gì đó giống như cfengine/Chef cho việc triển khai (nó có thể triển khai tất cả mọi thứ - bao gồm các công việc cron)

Tuy nhiên, nếu bạn hỏi câu hỏi này - nó có thể là bạn có nhiều máy chủ sản xuất, mỗi máy chủ chạy số lượng lớn các công việc theo lịch trình. Nếu đây là trường hợp, bạn có thể muốn một công cụ không chỉ triển khai công việc mà còn theo dõi lỗi thành công, cho phép bạn dễ dàng xem nhật ký từ lần chạy cuối cùng, chạy thống kê, cho phép bạn dễ dàng thay đổi lịch biểu cho nhiều công việc và máy chủ cùng một lúc (do bảo trì theo kế hoạch ...), v.v.

Tôi sử dụng công cụ thương mại có tên "UC4". Tôi không thực sự khuyên bạn nên nó, vì vậy tôi hy vọng bạn có thể tìm thấy một chương trình tốt hơn có thể giải quyết cùng một vấn đề. Tôi chỉ nói rằng việc quản lý công việc không kết thúc khi bạn triển khai chúng.

0

Nếu bạn đang sử dụng Django, hãy xem jobs system from django-command-extensions.

Lợi ích là bạn có thể giữ công việc của mình bên trong cấu trúc dự án, với điều khiển phiên bản, viết mọi thứ bằng Python và chỉ định cấu hình crontab một lần.

8

Sử dụng Fabric, tôi muốn giữ phiên bản nguyên sơ của crontab tại địa phương, theo cách đó tôi biết chính xác những gì đang được sản xuất và có thể dễ dàng chỉnh sửa các mục nhập ngoài việc thêm chúng.

Các kịch bản tôi sử dụng vải trông giống như thế này (một số mã redacted ví dụ chăm sóc bản sao lưu):

def deploy_crontab(): 
    put('crontab', '/tmp/crontab') 
    sudo('crontab < /tmp/crontab') 
0

tôi sử dụng Buildout để quản lý các dự án Django của tôi. Với Buildout, tôi sử dụng z3c.recipe.usercrontab để cài đặt các công việc cron khi triển khai hoặc cập nhật.

1

Có 3 tùy chọn triển khai thủ công crontab nếu bạn không thể kết nối hệ thống của mình với hệ thống quản lý cấu hình như cfengine/con rối.

Bạn chỉ có thể sử dụng crontab -u user -e nhưng bạn có nguy cơ bị lỗi khi sao chép/dán.

Bạn cũng có thể sao chép tệp vào thư mục cron nhưng không có kiểm tra cú pháp cho tệp và trong linux, bạn phải chạy chạm/var/spool/cron để thu thập các thay đổi.

Lưu ý Mọi người sẽ quên lệnh chạm tại một số điểm.

Theo kinh nghiệm của tôi, phương pháp này là cách thủ công yêu thích triển khai crontab của tôi.

diff /var/spool/cron/<user> /var/tmp/<user>.new 
crontab -u <user> /var/tmp/<user>.new 

Tôi nghĩ phương pháp tôi đã đề cập ở trên là tốt nhất vì bạn không gặp rủi ro sao chép/dán lỗi giúp bạn duy trì tính nhất quán với tệp được kiểm soát phiên bản của mình. Nó thực hiện kiểm tra cú pháp của các tác vụ cron bên trong tệp, và bạn sẽ không cần phải thực hiện lệnh cảm ứng như bạn muốn nếu bạn chỉ đơn giản là sao chép tệp.

+0

Từ 'triển khai' có nghĩa là một quá trình hoàn toàn tự động. Không bao giờ nên có bất kỳ chạm tay thủ công nào, cũng không phải là sự khác biệt để kiểm tra những gì đang thay đổi. Một lệnh duy nhất làm toàn bộ điều, thời gian. (ví dụ: "triển khai dàn dựng fab: v1.23") –

0

Có dự án của bạn dưới sự kiểm soát phiên bản, bao gồm mật khẩu crontab.txt, là những gì tôi thích. Sau đó, với Fabric, nó cũng đơn giản như thế này:

@task 
def crontab(): 
    run('crontab deployment/crontab.txt') 

này sẽ cài đặt các nội dung của deployment/crontab.txt để crontab của người dùng mà bạn kết nối với máy chủ. Nếu bạn không có dự án hoàn chỉnh của mình trên máy chủ, trước tiên bạn muốn put tệp crontab.

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