2017-05-19 11 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

>>/BACKUP2/softdev /決済/ p.txt "の違いは$ diffのです" crontabからsqlplusのフルパスを指定する必要があります – fortune

+0

'END;の前に' exit; 'を使用してください。 – Utsav

答えて

0

は完全にここで

応答ソリューションです。

ORACLE_HOME = /オラクル/ app/oracleは/製品/ 11.2.0/DB_1 輸出ORACLE_HOME

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

diff = 0;

timeRightNow = $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

エコー= '20170519180000' timeoffile = '20170519175500'

差分と思い

0

あなたのcronでの.profileに初期化され、あなたの変数を認識していないので、それは通常起こります。 cron経由でこのスクリプトを実行すると、sqlplusのパスも使用できません。したがって、問題を解決するには、以下の形式でcronジョブを設定してください。正常に動作します。 cronのは、それは、すぐにパスが仕事をcronに与えられているとして、クエリを実行しないように、SQLPlusをのパスを知るdoesnotとして私はそれを行っている

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

.profile –

+0

を使用して、ユーザーシェルの環境項目を設定する方法を教えてください。 umaskなどの項目、PS1やPATHなどの変数 – Rups

関連する問題