2010-05-27 41 views

Trả lời

15

tập lệnh kích hoạt của virtualenv khá đơn giản. Nó chủ yếu đặt đường dẫn đến trình thông dịch Python của virtualenv của bạn; những thứ khác mà nó làm (thiết lập PS1, lưu các biến cũ, v.v.) không thực sự cần thiết nếu bạn không ở trong một trình bao tương tác. Vì vậy, cách đơn giản nhất là chỉ để khởi động kịch bản Python của bạn với trình thông dịch Python đúng, có thể được thực hiện theo một trong hai cách sau:

1. Thiết lập kịch bản Python của bạn để sử dụng Python thông dịch viên của virtualenv bạn

giả sử thông dịch viên của virtualenv của bạn đang ở ~/virtualenv/bin/python, bạn có thể đặt con đường mà ở phía trên cùng của kịch bản Python của bạn:

#!/home/user/virtualenv/bin/python 

Và sau đó khởi động kịch bản của bạn từ crontab của bạn, như bình thường.

2. Khởi chạy kịch bản với trình thông dịch Python thích hợp trong cronjob của bạn

Giả sử kịch bản của bạn là ở ~/bin/cronjob và Python thông dịch viên của virtualenv của bạn đang ở ~/virtualenv/python, bạn có thể đặt điều này trong crontab của bạn:

* * * * * /home/user/virtualenv/python /home/user/bin/crontab 
+0

Còn các đường dẫn đến thư viện easy_install thì sao? – Timmy

+2

Nếu chúng được cài đặt trong môi trường ảo, hoặc thư mục gói trang web "toàn cầu", chúng sẽ được tìm thấy; nếu không, bạn sẽ phải đặt chúng trong '$ PYTHONPATH' của bạn, điều này hơi xấu xí hơn nhưng có thể được thực hiện bằng cách khởi chạy thùng Python bằng'/usr/bin/env' hoặc somesuch. – mipadi

+1

khối mã cuối cùng có thể kết thúc bằng "/ home/bin/cronjob" –

1

Cách tiếp cận của tôi là luôn giữ crontab càng đơn giản càng tốt và xử lý tất cả các cấu hình bên trong tập lệnh được gọi là crontab.

1) Tạo một kịch bản shell: ví dụ /var/webapp/cron.sh

#!/bin/sh 
PATH="/var/webapp/.env/bin:$PATH" 
export PATH 
cd /var/webapp/ 
python test.py 

nơi /var/webapp/.env/bin là vị trí virtualenv. Đặt PATH, bạn không cần chạy nguồn ../activate

2) Đặt đúng môi trường của bạn. Ví dụ, đối với một ứng dụng Django:

#!/usr/bin/env python 

import os 
from datetime import datetime 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.production' 
os.environ['DJANGO_CONF'] = 'settings.production' 

from util.models import Schedule 

dset = Schedule.objects.all() 
for rec in dset: 
    print rec 

print 'cron executed %s' % datetime.today() 

On ví dụ này, cài đặt django đang nằm trên các thiết lập/production.py

3) Cuối cùng, chỉnh sửa/etc/crontab. Ví dụ: để thực thi sau mỗi nửa giờ, mỗi ngày:

1,31 * * * * root /var/webapp/cron.sh >> /var/webapp/cron.log 

Lưu ý rằng việc tạo nhật ký để giúp bạn tìm lỗi hoặc gỡ lỗi thư là rất quan trọng.

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