2012-01-04 38 views
51

Tôi đang cố gắng thực thi một tập lệnh python bằng cách sử dụng crontab linux, nhưng tôi đã tìm thấy rất nhiều giải pháp và không có giải pháp nào trong số chúng hoạt động. Ví dụ: chỉnh sửa anacron tại /etc/cron.d hoặc sử dụng crontab -e.Thực thi python Script trên Crontab

Tôi muốn chạy tập lệnh này sau mỗi 10 phút.

Tôi phải chỉnh sửa tệp nào để định cấu hình này?

Cảm ơn trước

EDIT

tôi đặt dòng này vào cuối của tập tin, nhưng nó không thay đổi bất cứ điều gì. Tôi có phải khởi động lại dịch vụ nào không?

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py 

EDIT [2]

Guys, tôi đã theo mã nguồn. Có lẽ một vấn đề ở đây, nhưng khi tôi thực hiện nó bằng tay, nó hoạt động:

http://pastebin.com/qsWHNzqT

+0

Khi bạn nói "nó không thay đổi bất cứ điều gì". Nó có hiển thị lỗi không, nó có chạy không? Hành vi là gì? –

+0

là "Documets" thay vì "Documents" có chủ ý? –

+0

Đơn giản là không xảy ra bất cứ điều gì. :( – guisantogui

Trả lời

91

Chỉ cần sử dụng -e crontab và làm theo hướng dẫn ở đây:

http://adminschoice.com/crontab-quick-reference

Nhìn vào điểm 3 cho một hướng dẫn về cách xác định tần số.

Dựa trên yêu cầu của bạn, nó có hiệu quả nên là:

*/10 * * * * /usr/bin/python script.py 
+1

Tôi làm theo hướng dẫn này, nhưng khi tôi lưu tệp xuất hiện một thông báo: "/tmp/crontab.JTQ0My/crontab":22: lỗi phút lỗi trong tệp crontab, không thể cài đặt. Bạn có muốn thử lại bản chỉnh sửa tương tự không? (y/n) " nếu tôi nhập" y ", tôi đã quay lại chỉnh sửa tệp và nếu tôi nhập" n ", tệp sẽ không được lưu. Tôi thêm dòng này vào dòng cuối cùng của tệp: "/1 * * * */usr/bin/python script.py " – guisantogui

+0

@guisantogui có một điểm trong hướng dẫn giải thích rằng việc sử dụng"/1 "có thể không được hỗ trợ bởi tất cả các hệ điều hành. Bạn đang chạy hệ điều hành nào? trên? –

+3

@guisantogui chỉ nhận thấy bạn đang thiếu dấu "*" trước "/" –

46

Đặt kịch bản của bạn trong một file foo.py bắt đầu với

#!/usr/bin/python 

sau đó cung cấp quyền thực thi kịch bản rằng việc sử dụng

chmod a+x foo.py 

và sử dụng đường dẫn đầy đủ của tệp foo.py của bạn e trong số crontab của bạn.

Xem tài liệu hướng dẫn của execve(2) mà là xử lý các shebang

+0

là #!/Bin/sh tốt cho các tập lệnh shell? – Tomer

7

Như bạn đã đề cập không thay đổi bất cứ điều gì,

Trước tiên, bạn nên chuyển hướng cả stdin và stderr khỏi án tử hình crontab như dưới đây:

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py > /tmp/listener.log 2>&1 

thì bạn có thể xem tệp /tmp/listener.log để xem tập lệnh có được thực hiện như bạn mong đợi hay không.

Thứ hai, đoán những gì bạn có nghĩa là thay đổi bất cứ điều gì là bằng cách xem các tập tin được tạo ra bởi chương trình của bạn:

f = file('counter', 'r+w') 
json_file = file('json_file_create_server.json','r+w') 

công việc crontab trên sẽ không tạo ra những tập tin trong thư mục /home/souza/Documets/Listener, như công việc cron là không được thực hiện trong thư mục này và bạn sử dụng đường dẫn tương đối trong chương trình. Vì vậy, để tạo ra những tập tin trong thư mục /home/souza/Documets/Listener, công việc cron sau đây sẽ làm các trick:

*/2 * * * * cd /home/souza/Documets/Listener && /usr/bin/python listener.py > /tmp/listener.log 2>&1 

Thay đổi thư mục làm việc và thực thi kịch bản từ đó, sau đó bạn có thể xem các tập tin được tạo ra tại chỗ.

+0

2> & 1 là gì? –

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