linux - 从 bash 脚本设置 crontab

标签 linux bash shell cron

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

这是我的第一个剧本。所以如果事情太明显而不能问,我深表歉意

最佳答案

真正的问题是:您在 crontab 命令中拼错了文件名。将其更改为:

crontab sqlcorn.sh

crontab sqlcron.sh

对您的代码的一些评论:

您的多个 echo 命令最好写成“here document”。而不是这样:

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 不是一个好的文件名,因为它不是 shell 脚本;只需将其称为 sqlcron。系统不关心,但你应该关心。

其次,我上面提到的拼写错误。

关于linux - 从 bash 脚本设置 crontab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084333/

相关文章:

r - 如何将散点图中点的标签输出到bash控制台

linux - Bash,如何对每一行应用一个算术表达式?

bash - 如何在 Linux Bash Shell 命令行中删除右侧的整个单词

java - 在shell脚本或perl脚本中定义hadoop FS路径

bash - 此命令只能由 root 使用

linux - 在 Linux Git 目录中输入 "cd"命令时会发生什么?

java - java linux 中 http 包导入错误

linux - 脚本保留在 Oracle 数据库中

linux - msync 是否像 ext3 上的 fsync 一样将文件系统上的所有文件同步到磁盘?

bash - 存储在 Bash 变量中的逐字文本