2011-12-01 118 views
-1
system("$sqlldr $oracleLogon control=$ctlFile log=$logFile data=$dateFile"); 

以上是我的Perl脚本的最后一行。当我手动(从cli)运行包含此行的脚本时,它可以正常工作。但是当我把它放到crontab中时,就会失败。Crontab问题与Perl脚本

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

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

+4

“获得失败”并不是很好的描述你的错误。显示变量和错误消息的分配。 – TLP

+0

-1不包括错误信息。 – tadmc

+1

当你从CLI运行它时,你是否以oracle用户身份运行它?如果没有,那么你很可能在某个地方有权限问题。 – tadmc

回答

2

当脚本在命令行上运行,但不与crontab一起工作时,通常是由于环境的差异。

就你而言,你正试图执行一个Oracle工具。所有Oracle工具都需要ORACLE_HOME环境变量。这些变量在使用终端时设置,但在使用crontab时不会使用而是

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

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

3

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

就在用perl系统(..)调用放:

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

ENV称为CLI进行比较。

+0

非常感谢。我应该像用户oracle一样设置cron环境。我的错误是“如果我为指定的用户设置crontab,那意味着根据/ home/user/.profile,ENV设置必须相同” – tsoomo