Python 在 cron 中找不到共享库

标签 python cron shared-libraries

我的 Python 脚本在 shell 中运行良好。但是,当我 cron 它(在我自己的帐户下)时,它会给我以下错误:

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

脚本的第一行有:

#!/usr/local/bin/python

我知道我的 ~/.bashrc 文件中有以下行,这说明它在 shell 中有效

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-shared,则二进制文件本身要大得多,并且您不需要指定任何 LD_LIBRARY_PATH

最佳答案

假设您的 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

关于Python 在 cron 中找不到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452908/

相关文章:

android - 如何构建没有版本后缀的ffmpeg共享库

gcc - x86-64 汇编语言中的 ELF 共享对象

Python合并数据框和列表字典的字典

python - 使用 Django Rest Framework 在 ModelViewSet 中使用自定义函数

来自并行文件的 Python 元组

laravel - 使用 PHP Buildpack 安排 CronJobs

python 文档测试或单元测试

ruby-on-rails - Rails Whenever Gem 如何在 Controller.rb 文件中运行特定方法

php - PHP 脚本中的 cURL 请求通过浏览器工作,但不能通过 CRON

c - 将已编译的库链接到更新版本的 glibc