2013-10-18 40 views
4

我的Python脚本在shell中运行良好。然而,当我cron它(我自己的帐户)它给我以下错误:Python无法在cron中找到共享库

/usr/local/bin/python:加载共享库时出错:libpython2.7.so.1.0:无法打开共享对象文件:没有这样的文件或目录

脚本的第一行:

#!/usr/local/bin/python 

我知道我必须在我的〜/ .bashrc文件以下行,这说明它的工作原理在外壳

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 

如果我使用下面的cron它也可以工作,但它看起来很丑,我讨厌适用于每一个cron工作。

00 * * * 1-5 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib && /path/somejob.py 

有没有更好的方法来做到这一点?我知道我们的管理员曾经在某些共享的nfs路径上安装了早期版本的Python,并且它不需要像提到的here所述的任何系统级配置更改。我们的旧Python脚本只有这一行,因为第一行没有明确设置LD_LIBRARY_PATH。

#!/nfs/apps/python/bin/python 

在旧NFS安装

/nfs/apps/python/ 
    -- bin 
    -- lib 
    -- share 
    -- include 

当前Python是2.7.3,并且它的安装步骤如下:(Linux的CentOS的6)

./configure --prefix=/usr/local --enable-shared --with-system-expat --with-system-ffi 
make 
make install 

更新:

  1. 正如ansh0I建议的那样,将LD_LIBRARY_PATH添加到cronab的顶部工作!

  2. python抱怨共享库的原因是它安装了--enable-shared。因此python二进制文件要小得多,在/usr/local/lib/libpython2.7.so中有很多真正的解释代码共享。然后你需要通过设置LD_LIBRARY_PATH来告诉python在哪里找到共享库。如果Python是安装没有--enable-共享,二进制文件本身大很多,而且你不需要指定任何LD_LIBRARY_PATH

+0

感谢您的更新:)'--enable-shared'刚刚救了我 –

回答

6

假设你LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib表达工作正常,你可以设置在crontab文件顶部的环境变量如下

#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