2011-12-01 180 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