Tôi đang cố gắng để chạy một lệnh quản lý Django từ cron. Tôi đang sử dụng virtualenv để giữ cho dự án của tôi được sandbox.
Tôi đã thấy các ví dụ ở đây và các nơi khác hiển thị các lệnh quản lý đang chạy trong virtualenv như:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
Tuy nhiên, mặc dù syslog hiển thị một mục khi tác vụ nên bắt đầu, tác vụ này không bao giờ thực sự chạy (tệp nhật ký cho tập lệnh trống). Nếu tôi chạy dòng thủ công từ shell, nó hoạt động như mong đợi.
Cách duy nhất hiện tại tôi có thể nhận lệnh để chạy qua cron, là phá vỡ các lệnh và đưa chúng vào một tập lệnh bao bọc bash câm:
#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg
BIÊN TẬP:
ars đã đưa ra một sự kết hợp làm việc của các lệnh:
0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg
Ít nhất trong trường hợp của tôi, việc gọi kịch bản kích hoạt cho virtualenv không làm gì cả. Điều này làm việc, như vậy với chương trình.
env
và export
tất cả chúng trong một trình bao bọc tập lệnh bash mà bạn gọi từ crontab.