Crontab问题与perl脚本

时间:2011-12-01 11:09:31

标签: perl crontab sql-loader

system("$sqlldr $oracleLogon control=$ctlFile log=$logFile data=$dateFile"); 

以上是我的perl脚本的最后一行。当我手动运行包含该行的脚本(来自cli)时,它可以工作。但是当我把它放到crontab上时,失败了。

变量$sqlldr包含Oracle的sqlldr脚本的完整路径,包括它的。当然,所有变量都包含完整路径,包括文件名。

此外,我的脚本多次调用“系统”,所有这些都运行良好,期待最后这一行。我正在使用Ubuntu 10.04服务器64位,我把我的脚本放到用户oracle的crontab中 我真的无法忍受那里发生的事情。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

在CLI和cron的情况下检查环境之间的差异 - 这将是理解问题的关键。

就在你的系统(..)调用perl put之前:

system("env > ~/env_in_cron.txt");

并将其与CLI中调用的 env 进行比较。

答案 1 :(得分:2)

当脚本在命令行上运行而不是在crontab上运行时,通常是由于环境差异。

在您的情况下,您正在尝试执行Oracle工具。并且所有Oracle工具都需要ORACLE_HOME环境变量。这些变量在使用终端时设置,但在使用crontab时

在脚本中,尝试在启动SQL * Loader之前设置ORACLE_HOME并将其导出到Oracle客户端。

请发布您的错误消息。如果它以静默方式失败,请尝试将STDOUT和STDERR重定向到crontab调用中的文件并发布结果。