2012-05-02 39 views
8

Tôi đang thiết lập công việc cron đầu tiên của mình và nó không hoạt động. Tôi nghĩ rằng vấn đề có thể là một vấn đề đường dẫn tương đối.Đường dẫn tương đối trong tập lệnh được thực hiện bởi các công việc cron

công việc Với cron:

*/1 * * * * python2.7 /home/path/to/my/script/my_script.py 

và my_script.py:

import sqlite3 
db = sqlite3.connect('my_db.db') 
cur = db.cursor() 
... 

Làm thế nào để đảm bảo rằng my_script.py tìm kiếm my_db.db trong /home/path/to/my/script/ (cùng thư mục mà chứa my_script.py) chứ không phải bất cứ điều gì thư mục crontab sống?

Các đề xuất khắc phục sự cố khác cũng được hoan nghênh.

Lưu ý - Tôi nghĩ vấn đề có thể là vấn đề đường dẫn vì khi tôi thử chạy my_script.py sử dụng python2.7 /home/path/to/my/script/my_script.py từ bất kỳ vị trí nào khác ngoài /home/path/to/my/script/, tôi gặp lỗi "không thể mở cơ sở dữ liệu".

Trả lời

12
import sqlite3 
import os 

dir_path = os.path.dirname(os.path.abspath(__file__)) 

db = sqlite3.connect(os.path.join(dir_path, 'my_db.db')) 
cur = db.cursor() 
... 

Hãy nhớ rằng Python của os.path module là bạn thân nhất của bạn khi thao tác đường dẫn.

+1

Cảm ơn! Cách tiếp cận này cho phép tôi chạy kịch bản của tôi bằng cách sử dụng 'python2.7 /home/path/to/my/script/my_script.py'...which là rất tốt. Tuy nhiên, công việc cron vẫn không hoạt động, vì vậy tôi cần phải tiếp tục khắc phục sự cố. Tôi đoán tin tốt là tôi đã loại bỏ một lý thuyết và học về os.path. Cảm ơn một lần nữa. –

1

bạn có thể muốn làm điều đó một chút khác nhau:

os.chdir(os.path.dirname(os.path.abspath(__file__))) 
db = sqlite3.connect('my_db.db') 

sử dụng chdir sẽ cho phép để thực hiện bạn script trong thư mục địa phương và cho phép bạn giữ tất cả các tài liệu tham khảo địa phương không thay đổi nếu bạn có nhiều hơn một nó có thể tiết kiệm bạn một thời gian :)

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