установка crontab из скрипта bash - PullRequest
0 голосов
/ 31 января 2012

Я написал следующий скрипт, но получаю ошибку sqlcorn.sh: No such file or directory

вот сценарий

#!/bin/bash
ORACLE_HOME="/opt/app/oracle/product/11.2.0/dbhome_1"
ORACLE_SID="HEER"
ORACLE_USER="USER1"
ORACLE_PASSWORD="USERP"

echo "export ORACLE_HOME=$ORACLE_HOME" >> sqlcronprocedure.sh
echo "export PATH=\$ORACLE_HOME/bin:\$PATH" >> sqlcronprocedure.sh
echo "export ORACLE_SID=$ORACLE_SID" >> sqlcronprocedure.sh
echo "rTmpDir=/tmp" >> sqlcronprocedure.sh

echo "sqlplus -s $ORACLE_USER@$ORACLE_SID/$ORACLE_PASSWORD  > $rTmpDir/deleteme.txt 2>&1 <<EOF" >> sqlcronprocedure.sh
echo "    select 1 from dual;" >> sqlcronprocedure.sh
echo "    execute someproc(1000,14);" >> sqlcronprocedure.sh
echo "EOF" >> sqlcronprocedure.sh

chmod 755 sqlcronprocedure.sh

crontab -l > sqlcron.sh
echo "0,15,30,45 * * * * /sqlcronprocedure.sh" >> sqlcron.sh
crontab sqlcorn.sh

Это мой первый сценарий. поэтому я прошу прощения, если вещи слишком очевидны, чтобы спросить

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Реальная проблема: вы неправильно написали имя файла в команде crontab.Измените его с:

crontab sqlcorn.sh

на

crontab sqlcron.sh

Еще несколько комментариев к вашему коду:

Ваши несколько команд echo лучше написаны как "здесь документ"».Вместо этого:

echo "export ORACLE_HOME=$ORACLE_HOME" >> sqlcronprocedure.sh
echo "export PATH=\$ORACLE_HOME/bin:\$PATH" >> sqlcronprocedure.sh
echo "export ORACLE_SID=$ORACLE_SID" >> sqlcronprocedure.sh
echo "rTmpDir=/tmp" >> sqlcronprocedure.sh

echo "sqlplus -s $ORACLE_USER@$ORACLE_SID/$ORACLE_PASSWORD  > $rTmpDir/deleteme.txt 2>&1 <<EOF" >> sqlcronprocedure.sh
echo "    select 1 from dual;" >> sqlcronprocedure.sh
echo "    execute someproc(1000,14);" >> sqlcronprocedure.sh
echo "EOF" >> sqlcronprocedure.sh

вы можете сделать это:

cat <<EOF >sqlcronprocedure.sh
export ORACLE_HOME=$ORACLE_HOME
export PATH=\$ORACLE_HOME/bin:\$PATH
export ORACLE_SID=$ORACLE_SID
rTmpDir=/tmp
EOF

cat <<END_OF_SCRIPT >sqlcronprocedure.sh
export ORACLE_HOME=$ORACLE_HOME
export PATH=\$ORACLE_HOME/bin:\$PATH
export ORACLE_SID=$ORACLE_SID
rTmpDir=/tmp

sqlplus -s $ORACLE_USER@$ORACLE_SID/$ORACLE_PASSWORD  > $rTmpDir/deleteme.txt 2>&1 <<EOF
    select 1 from dual;
    execute someproc(1000,14);
EOF
END_OF_SCRIPT

, что немного проще для чтения.(Ваша версия не была неправильной, просто трудно читаемой и подверженной ошибкам; вы должны получить >> sqlcronprocedure.sh прямо на eacn и на каждой строке.)

Примечание: вы используете >> для сборки sqlcronprocedure.sh, который добавляет к существующему sqlcronprocedure.sh, если он существует.Я не думаю , что вы хотите сделать;Вы, вероятно, хотите создать файл с нуля.Мой код предполагает, что вы хотите создать файл, а не добавлять его.

Последняя часть вашего скрипта:

crontab -l > sqlcron.sh
echo "0,15,30,45 * * * * /sqlcronprocedure.sh" >> sqlcron.sh
crontab sqlcorn.sh

- это хорошо, за исключением двух вещей.

Во-первых, sqlcron.sh не подходит для файла, так как это не сценарий оболочки;просто назовите это sqlcron.Система не заботится, но вы должны.

Во-вторых, орфографическая ошибка, о которой я упоминал выше.

0 голосов
/ 31 января 2012

вам нужно указать полный путь к sqlcron.sh в вашем скрипте ...

...