Относительные пути в сценариях, выполняемых заданиями cron

я настраиваю свою первую работу cron, и она не работает. Я думаю, что проблема может быть относительной проблемой пути.

дано задание cron:

*/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 ищет my_db.db на /home/path/to/my/script/ (тот же каталог, что и дома my_script.py) и не в каком каталоге живет crontab?

другие предложения по устранению проблем, также приветствуется.

примечание - Я думаю, что вопрос может быть проблемой пути, потому что, когда я пытаюсь запустить my_script.py используя python2.7 /home/path/to/my/script/my_script.py из любого места, кроме /home/path/to/my/script/, Я получаю ошибку" невозможно открыть базу данных".

2 ответов


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

помните, что Python os.модуль пути является вашим лучшим другом при манипулировании путями.


вы можете сделать это немного по-другому:

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

использование chdir позволит вам выполнить скрипт в локальном каталоге и позволит вам сохранить все локальные ссылки без изменений, если у вас есть более одного, это может сэкономить вам время:)