从bash脚本设置crontab

时间:2012-01-31 17:45:08

标签: linux bash shell crontab

我写了以下脚本,但收到错误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 个答案:

答案 0 :(得分:2)

真正的问题:您在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

这有点容易阅读。 (您的版本不正确,难以阅读且容易出错;您必须在eacn和每一行都获得>> sqlcronprocedure.sh权限。)

注意:您使用>>构建sqlcronprocedure.sh,如果存在sqlcronprocedure.sh,则会附加到现有crontab -l > sqlcron.sh echo "0,15,30,45 * * * * /sqlcronprocedure.sh" >> sqlcron.sh crontab sqlcorn.sh 。我不认为这就是你想做的事情;您可能想要从头开始创建文件。我的代码假定您要创建文件而不是附加到文件。

脚本的最后一部分:

sqlcron.sh

除了两件事之外没什么问题。

首先sqlcron不是文件的好名称,因为它不是shell脚本;只需将其称为{{1}}即可。系统并不关心,但你应该这样做。

第二,我上面提到的拼写错误。

答案 1 :(得分:-1)

您需要在脚本中指定sqlcron.sh的完整路径...