2012-05-02 19 views
8

Estoy configurando mi primer trabajo cron y no está funcionando. Creo que el problema puede ser un problema de ruta relativa.Rutas relativas en scripts ejecutados por trabajos cron

determinado puesto de trabajo cron:

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

y my_script.py:

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

¿Cómo me aseguro de que my_script.py se buscan en my_db.db/home/path/to/my/script/ (el mismo directorio que alberga my_script.py) y no lo directorio crontab vive?

Otras sugerencias para solucionar problemas también son bienvenidas.

Nota - creo que el problema puede ser un problema de ruta, porque cuando intento correr my_script.py usando python2.7 /home/path/to/my/script/my_script.py desde cualquier ubicación que no sea /home/path/to/my/script/, consigo un "no se puede abrir la base de datos" error.

Respuesta

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

Recuerde que os.path module de Python es su mejor amigo cuando la manipulación de caminos.

+1

Gracias! Este enfoque me permite ejecutar mi script usando 'python2.7 /home/path/to/my/script/my_script.py'..which es genial. Sin embargo, el trabajo cron aún no funciona, así que debo continuar con la solución de problemas. Creo que la buena noticia es que eliminé una teoría y aprendí sobre os.path. Gracias de nuevo. –

1

es posible que desee hacerlo un poco diferente:

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

usando chdir permitirá que ejecutar un script en el directorio local y le permitirá mantener todas las referencias locales sin cambios si usted tiene más de una puede ahorrar algún tiempo :)

Cuestiones relacionadas