system("$sqlldr $oracleLogon control=$ctlFile log=$logFile data=$dateFile");
以上是我的perl脚本的最后一行。当我手动运行包含该行的脚本(来自cli)时,它可以工作。但是当我把它放到crontab上时,失败了。
变量$sqlldr
包含Oracle的sqlldr脚本的完整路径,包括它的。当然,所有变量都包含完整路径,包括文件名。
此外,我的脚本多次调用“系统”,所有这些都运行良好,期待最后这一行。我正在使用Ubuntu 10.04服务器64位,我把我的脚本放到用户oracle的crontab中 我真的无法忍受那里发生的事情。有人可以帮帮我吗?
答案 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调用中的文件并发布结果。