script from every python cron shared-libraries

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:

  1. Como ya lo sugerí, agregar LD_LIBRARY_PATH a la parte superior de cronab funciona.

  2. 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