【发布时间】:2020-04-28 04:32:05
【问题描述】:
抱歉,问题很长,但我有点迷路,请帮帮我。我遇到了以下问题:
操作系统:Red Hat Enterprise Linux Server release 6.6 (Santiago)
Perl:This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
有问题的模块:DBD::Oracle
简要说明:
我有一个可以从命令行正常运行的 perl 脚本。在 crontab 中这样设置时:
* * * * * \path\to\script.pl
产生以下错误:
Can't load '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.12.1: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 190.
到目前为止,这是我尝试过的:
在脚本的乞求中设置此块 - crontab 执行同样的错误。
BEGIN {
$ENV{'ORACLE_HOME'}='/opt/oracli/app/oracli/product/12.2.0/client_1';
$ENV{'LD_LIBRARY_PATH'}='/opt/oracli/app/oracli/product/12.2.0/client_1/lib:/lib:/usr/lib';
}
将以下行添加到 /home/user/.bash_profile(相同的 crontab 用户)
ORACLE_HOME=/opt/oracli/app/oracli/product/12.2.0/client_1; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
纠正 /home/user/.bashrc 中的行(因为它们在那里搞砸了)
重新加载 .bash_profile 和 .bashrc
在我的 crontab 中添加这个:
BASH_ENV=/home/user/.bash_profile
以上所有都没有帮助我。我的来源是谷歌,假设我没有提供 ORACLE_HOME 和 LD_LIBRARY_PATH。
当我运行一个包含以下内容的简单 shell 脚本时:
#!/bin/sh
ORACLE_HOME=/opt/oracli/app/oracli/product/12.2.0/client_1
export ORACLE_HOME
LD_LIBRARY_PATH=/opt/oracli/app/oracli/product/12.2.0/client_1/lib
export LD_LIBRARY_PATH
/path/to/script.pl
一切都很好,所以......
请指出我缺少什么。 linux 中是否有针对 crontab 环境的不同配置文件。
对不起,我不只是进入操作系统。
编辑:对不起,我错过了 - 如果可能,我想绕过 shell 导出调用 perl 所需的变量:
* * * * * \path\to\shell_with_variables.sh
但是要找到可以全局添加变量的位置,以便它们在 crontab 执行中可见
提前谢谢你。
【问题讨论】:
-
由 cron 生成的 Shell 具有非常少的环境变量集。我看到你已经部分解决了你的问题。您需要在 crontab 文件本身中设置您在示例 shell 脚本中创建的变量 - 通过预先声明变量或在文件中的某处设置它们。
-
很抱歉我在帖子中错过了这个。在 crontab 中运行示例 shell 脚本时,一切正常。但如果可能的话,我希望绕过创建调用 perl 脚本的 shell 脚本(由于计划了大量脚本),如果可能,我希望在配置文件中添加环境变量,以提供(使 ENV 变量可见)此用户的 crontab。我将编辑原始帖子。谢谢你的回答。
-
那是相当老的 Perl 版本。大约(30-10)/2+1=11岁?
标签: linux perl cron environment-variables