【问题标题】:Crontab Unix Shell Script EOFCrontab Unix Shell 脚本 EOF
【发布时间】:2014-12-09 05:05:17
【问题描述】:
sqlplus -s u@t/t << EOF
drop table connection_backup;
CREATE TABLE connection_backup AS (SELECT * FROM connection);
drop table htbill_backup;
CREATE TABLE htbill_backup AS (SELECT * FROM htbill);
EXIT
EOF

Crontab -e File
*/1 * * * * sh ~/sql.sh | write $LOGNAME

由于第一行 crontab 中的 eof 停止了它们并且不执行进一步的 shell 脚本

【问题讨论】:

  • 你能解释清楚一点吗?您有一个名为sql.sh 的文件,其中包含sqlplusEOF 的行,当您尝试从cron 文件中调用它时,它似乎不起作用?您是否尝试了sql.sh 而不是~/ 的完整路径?尝试细分并获得一个简单的 shell 脚本以在 crontab 中工作,然后从那里开始。
  • 我也尝试过,当你在开始和结束时写回显语句时,它会显示但不执行 sql 语句

标签: shell unix crontab


【解决方案1】:

1.让你的shebang正确

使用以下命令查找您喜欢的 shell 所在的位置:

whereis bash

whereis sh

然后,在 sql.sh 脚本的顶部插入一个新行

#!<FULL PATH TO SHELL>

上面的一个例子是:

#!/bin/bash       

2。正确设置路径

查找sqlplus 在您的系统上的安装位置,使用

whereis sqlplus

在你的脚本中添加一个新的第二行

export PATH=${PATH}:<SQLPLUS DIRECTORY ONLY>

一个例子是

export PATH=${PATH}:/usr/local/bin         # Note the word `sqlplus` is omitted - we only specify the directory where it lives

3.使您的脚本可执行

使您的sql.sh 脚本可执行

chmod +x sql.sh

4.在 cron 之外测试你的脚本

测试你的脚本

./sql.sh

并确保在继续之前它可以正常工作。

5.在 cron 中正确获取脚本的路径

找到您的登录目录

cd
pwd

更改您的 crontab 脚本,使其显示:

*/1 * * * * <LOGIN DIRECTORY>/sql.sh

【讨论】: