from - python crontab
Python no puede encontrar la biblioteca compartida en cron (1)
Asumiendo que su expresión LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
funciona bien, puede configurar variables de entorno en la parte superior del archivo crontab como se muestra a continuación
#Setting up Environment variables
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
#Here follow the cron jobs
* * * * * echo $LD_LIBRARY_PATH >> /home/user/logfile.log
* * * * * some/cron/job.py
Mi script Python funciona bien en el shell. Sin embargo, cuando lo cronómetro (en mi propia cuenta) me da el siguiente error:
/ usr / local / bin / python: error al cargar las bibliotecas compartidas: libpython2.7.so.1.0: no se puede abrir el archivo de objeto compartido: No existe dicho archivo o directorio
La primera línea del script tiene:
#!/usr/local/bin/python
Sé que tengo la siguiente línea en mi archivo ~ / .bashrc, que explica que funciona en el shell
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Si lo cronoro utilizando lo siguiente, también funciona, pero se ve feo, y odio aplicarlo a cada tarea cron.
00 * * * 1-5 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib && /path/somejob.py
Hay una mejor manera de hacerlo? Sé que nuestro administrador solía tener una versión anterior de Python instalada en alguna ruta compartida de nfs, y no requiere ningún cambio en la configuración del nivel del sistema como se menciona aquí . Nuestro antiguo script de Python simplemente tiene esta línea como primera línea sin configuración explícita LD_LIBRARY_PATH.
#!/nfs/apps/python/bin/python
En la antigua instalación nfs
/nfs/apps/python/
-- bin
-- lib
-- share
-- include
Python actual es 2.7.3 y está instalado de la siguiente manera: (Linux CentOS 6)
./configure --prefix=/usr/local --enable-shared --with-system-expat --with-system-ffi
make
make install
Actualizar:
Como ya lo sugerí, agregar LD_LIBRARY_PATH a la parte superior de cronab funciona.
La razón por la cual Python se quejó de las bibliotecas compartidas es que está instalado con --enable-shared . Como resultado, el archivo binario de Python es mucho más pequeño, con gran parte del código de intérprete real compartido en /usr/local/lib/libpython2.7.so. Luego necesita decirle a python dónde encontrar la biblioteca compartida configurando LD_LIBRARY_PATH. Si python se instala sin --enable-shared , el archivo binario en sí es mucho más grande, y no es necesario especificar ninguna LD_LIBRARY_PATH