2012-11-06 38 views
7

crontab không thực thi được tập lệnh Python. Dòng lệnh tôi đang sử dụng để chạy kịch bản Python là ok.Crontab không thực thi được tập lệnh Python

Đây là những giải pháp tôi đã cố gắng:

  • thêm #!/usr/bin/env python ở phía trên cùng của main.py
  • thêm PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin ở đầu crontab
  • chmod 777 đến main.py tập tin
  • service cron restart

crontab của tôi là:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 

*/1 * * * * python /home/python_prj/main.py 

và log trong/var/log/syslog là:

Nov 6 07:08:01 localhost CRON[28146]: (root) CMD (python /home/python_prj/main.py) 

và không có gì khác.

Kịch bản main.py gọi một số phương thức từ các mô-đun khác theo python_prj, điều đó có quan trọng không?

Bất cứ ai cũng có thể giúp tôi?

+0

bạn đã thử "/ usr/bin/env/python /home/python_prj/main.py" trong lệnh cron của mình chưa? – Tjaart

+1

Có lẽ kịch bản của bạn đang bị lỗi trước khi nó có thể nhận được bất cứ điều gì được thực hiện vì lý do gì: thiếu quyền, thực hiện sai cwd? – Tjaart

+0

Tôi đã thử/usr/bin/env/python, vẫn không có may mắn – yebw

Trả lời

9

Kịch bản lệnh main.py gọi một số phương thức từ các mô-đun khác trong python_prj, điều đó có quan trọng không?

Vâng, đúng vậy. Tất cả các mô-đun cần phải được tìm thấy tại thời gian chạy. Bạn có thể thực hiện điều này theo nhiều cách, nhưng thích hợp nhất có thể là đặt biến PYTHONPATH trong crontab của bạn.

Bạn cũng có thể muốn đặt biến MAILTO trong crontab để bạn nhận được email với bất kỳ tracebacks nào.

[cập nhật] ở đây là đầu crontab của tôi:

www:~# crontab -l 

DJANGO_SETTINGS_MODULE=djangocron.settings 
PATH=... 
PYTHONPATH=/home/django 
MAILTO="[email protected]" 
... 
# m h dom mon dow command 
10-50/10 * * * *    /home/django/cleanup_actions.py 
... 

(chạy hành động dọn dẹp mỗi 10 phút, ngoại trừ ở phía trên cùng của giờ).

+0

Tôi không hiểu, tôi gõ "python /home/python_prj/main.py" trong dòng lệnh, nó hoạt động. PYTHONPATH sẽ được đặt thành python'path hoặc đường dẫn của mô-đun – yebw

+0

tất cả các mô-đun trong python_prj được tùy chỉnh – yebw

+0

Tôi vừa xóa tất cả các mô-đun mà main.py đã nhập. vẫn không làm việc – yebw

0

Kiểm tra quyền của tập lệnh. Hãy chắc chắn rằng nó thực thi bởi cron-- try chmod + x main.py.

3

Bất kỳ quyền truy cập tệp nào trong tập lệnh của bạn? Và nếu có, bạn đã sử dụng đường dẫn tương đối (hoặc thậm chí: không có đường dẫn rõ ràng) trong kịch bản của bạn?
Khi chạy từ dòng lệnh, thư mục thực tế là 'đường dẫn của bạn', nơi bạn bắt đầu tập lệnh. Khi được chạy bởi cron, 'đường dẫn của bạn' có thể khác nhau tùy thuộc vào biến môi trường.
Vì vậy, hãy thử sử dụng đường dẫn tuyệt đối cho bất kỳ tệp nào bạn truy cập.

+0

câu trả lời hữu ích: Tôi đã truy cập vào một cơ sở dữ liệu sqlite trong kịch bản python của tôi và đã không cung cấp đường dẫn đầy đủ. – vrleboss

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