2012-05-02 10 views
8

मैं अपना पहला क्रॉन नौकरी स्थापित कर रहा हूं और यह काम नहीं कर रहा है। मुझे लगता है कि समस्या एक सापेक्ष पथ मुद्दा हो सकता है।क्रॉन नौकरियों द्वारा निष्पादित स्क्रिप्ट में सापेक्ष पथ

को देखते हुए क्रॉन जॉब:

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

और my_script.py:

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

मैं कैसे सुनिश्चित करें कि my_script.py/home/path/to/my/script/ (समान निर्देशिका कि my_script.py घरों) में my_db.db के लिए लग रहा है और नहीं कर सकता हूँ जो कुछ भी निर्देशिका crontab रहता है?

समस्या निवारण के लिए अन्य सुझाव भी स्वागत है।

नोट - मुझे लगता है कि इस मुद्दे को एक पथ मुद्दा हो सकता है, क्योंकि जब मैं किसी भी /home/path/to/my/script/ के अलावा अन्य स्थान से python2.7 /home/path/to/my/script/my_script.py का उपयोग कर my_script.py चलाने की कोशिश करें, मैं एक "डेटाबेस को खोलने में असमर्थ" त्रुटि मिलती है।

उत्तर

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() 
... 

याद रखें कि अजगर के os.path module अपने सबसे अच्छे दोस्त जब रास्तों से छेड़छाड़ है। chdir का उपयोग कर स्थानीय निर्देशिका में आप स्क्रिप्ट निष्पादित करने के लिए यदि आप एक से अधिक इसे बचा सकता है आप सभी स्थानीय संदर्भ में कोई बदलाव नहीं रखने के लिए अनुमति देने के लिए अनुमति देते हैं और करेंगे

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

:

+1

धन्यवाद! यह दृष्टिकोण मुझे 'python2.7 /home/path/to/my/script/my_script.py'...hhich का उपयोग करके मेरी स्क्रिप्ट चलाने में सक्षम बनाता है। क्रॉन जॉब अभी भी काम नहीं करता है, इसलिए मुझे समस्या निवारण जारी रखने की आवश्यकता है। मुझे लगता है कि अच्छी खबर यह है कि मैंने एक सिद्धांत को समाप्त कर दिया है और os.path के बारे में सीखा है। एक बार फिर धन्यवाद। –

1

आप इसे थोड़ा अलग करने के लिए चाहते हो सकता है आप कुछ समय :)

संबंधित मुद्दे