【问题标题】:setting crontab from bash script从 bash 脚本设置 crontab
【发布时间】:2012-02-02 03:47:59
【问题描述】:

我编写了以下脚本,但出现错误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

这是我的第一个脚本。所以如果事情太明显而无法询问,我深表歉意

【问题讨论】:

  • 第一个脚本做得很好——除了错字(见我的回答)。

标签: linux bash shell crontab


【解决方案1】:

真正的问题:您在crontab 命令上拼错了文件名。改成:

crontab sqlcorn.sh

crontab sqlcron.sh

您的代码中还有一些 cmets:

您的多个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 和每一行都正确设置 &gt;&gt; sqlcronprocedure.sh。)

注意:您使用&gt;&gt; 构建sqlcronprocedure.sh,如果它存在,它会附加到现有的sqlcronprocedure.sh。我不认为这就是你想要做的;您可能想从头开始创建文件。我的代码假定您要创建文件而不是追加文件。

脚本的最后一部分:

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

除了两件事之外很好。

首先sqlcron.sh 不是一个好的文件名,因为它不是一个shell 脚本;就叫它sqlcron。系统不关心,但你应该关心。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我已经修改了我的脚本并在写入文件${PWD##*/}filename时添加了这个命令,但我仍然收到错误sqlcron.sh: No Such file or Directory
    • 不,你没有。 sqlcron.sh 不是 shell 脚本;它只是作为crontab 的参数给出。并且${PWD##*/} 无论如何都不会引用当前目录; ${PWD} 确实如此。 @EmAe:你为什么接受这个答案?
    • 他让我意识到 msitake 是什么 .. 我在某个地方指的是 sqlcorn .. 我应该指的是 sqlcron :)
    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2022-01-20
    • 2013-04-19
    • 2017-12-02
    • 1970-01-01
    相关资源
    最近更新 更多