У меня есть следующий скрипт (он подключается к базе данных oracle, ищет прикладные arclogs и удаляет его):
ARCLOGS=$(/oracle/base11202/11202/bin/sqlplus -s / as sysdba <<EOF
set head off
set verify off
set feedback off
select name from v$archived_log where applied = 'YES' and first_time > sysdate - 1 order by sequence#;
exit;
EOF)
echo "${ARCLOGS}" | while read arc
do
if [[ -e $arc ]]
then
rm -f $arc
fi
done
Он отлично работает, когда я запускаю его сам.Но идея состоит в том, чтобы начать это с cron.Крон выдает ошибки при попытке запустить этот скрипт:
Your "cron" job executed on test on Mon Nov 14 15:17:00 2011
if [ -e /arclogs/arcs.sh ]; then sh -x /arclogs/arcs.sh; fi
produced the following output:
+ + /oracle/base11202/bin/sqlplus -s / as sysdba
+ 0<<
set head off
set verify off
set feedback off
select name from v$archived_log where applied = "YES" and first_time > sysdate - 1 order by sequence#;
exit;
ARCLOGS=select name from v$archived_log where applied = "YES" and first_time > sysdate - 1 order by sequence#
*
ERROR at line 1:
ORA-00904: "YES": invalid identifier
+ read arc
+ echo select name from v$archived_log where applied = "YES" and first_time > sysdate - 1 order by sequence#
*
ERROR at line 1:
ORA-00904: "YES": invalid identifier
+ [[ -e select name from v$archived_log where applied = "YES" and first_time > sysdate - 1 order by sequence# ]]
+ read arc
+ [[ -e * ]]
+ read arc
+ [[ -e ERROR at line 1: ]]
+ read arc
+ [[ -e ORA-00904: "YES": invalid identifier ]]
+ read arc
Похоже, проблема с экранированием символов.Но я понятия не имею, что мне нужно бежать.
Кстати, сценарии работают с cron, когда я делю его на две части:
arcs.sh:
ARCLOGS=$(/oracle/base11202/bin/sqlplus -s / as sysdba <<EOF
set head off
set verify off
set feedback off
select name from v$archived_log where applied = 'YES' and first_time > sysdate - 1 order by sequence#;
exit;
EOF)
echo "${ARCLOGS}" | while read arc
do
if [[ -e $arc ]]
then
rm -f $arc
fi
done
и arcs.sql:
connect / as sysdba
set head off
set verify off
set feedback off
select name from v$archived_log where applied = 'YES' and first_time > sysdate - 1 order by sequence#;
exit;
Но я хочу, чтобы он был одним целым.Может кто-нибудь, пожалуйста, помочь?