2017-05-19 64 views
0

我有一個代碼,當手動執行(通過這個命令,即./script.sh)將查詢結果賦給一個變量,但是當它通過crontab自動執行時,則不會分配查詢結果到變量。cronjob中未分配變量值

請找到下面的代碼:

diff=0; 

diff=`sqlplus -s user/[email protected] << END 
     set pagesize 0 feedback off verify off heading off echo off; 
     SELECT (to_Date($timeRightNow,'YYYYMMDDHH24MISS') - to_date($timeoffile,'YYYYMMDDHH24MISS')) * 24 * 60 
     difference_in_minutes 
     from dual; 
END` 



echo "Difference is $diff ">>/backup2/softdev/settlement/p.txt 
+0

我想從crontab中你需要給出sqlplus的完整路徑 – fortune

+0

在'END'前面使用'exit;'。 – Utsav

回答

0

我已經做了作爲cron的亙古不知道的SQLPlus的路徑,以便它不只要給定路徑與cron作業執行查詢完美

這裏迴應是解決方案:

ORACLE_HOME =/ORACLE /應用程序/ ORACLE /產品/ 11.2.0/DB_1 出口ORACLE_HOME

dateToday = date +%Y%m%d%H%M%S

diff = 0;

timeRightNow = '20170519180000' timeoffile = '20170519175500'

DIFF = $ORACLE_HOME/bin/sqlplus -s user/[email protected] << END set pagesize 0 feedback off verify off heading off echo off; SELECT (to_Date($timeRightNow,'YYYYMMDDHH24MISS') - to_date($timeoffile,'YYYYMMDDHH24MISS')) * 24 * 60 difference_in_minutes from dual; END

回聲 「不同的是$ DIFF」 >> /備份2/softdev /結算/ p.txt

0

這通常是因爲你的cron是不知道你的變量初始化.profile文件中。即使通過cron運行此腳本,sqlplus的路徑也不可用。所以,要解決這個問題,請將cron作業設置爲以下格式,並且它可以正常工作。

00 * * * * . ~/.profile && /home/absolut_path_to_script.sh > /home/log_file_path.txt 
+0

可否告訴我更多關於.profile –

+0

用於設置用戶shell的環境項目。諸如umask之類的項目以及諸如PS1或PATH之類的變量。 – Rups