我已经设置了一个cron作业,它将运行一个shell脚本来连接我们的Oracle数据库并将一个表复制为一个csv文件。
crontab -l outputs:
*/5 * * * * /home/user/import.sh > /home/user/importLog.txt
import.sh看起来像这样:
#!/bin/bash
FILE="/path/to/application/TABLE.csv"
sqlplus -s user/pw@db <<EOF
SET PAGESIZE 50000
SET COLSEP ","
SET LINESIZE 200
SET FEEDBACK OFF
SPOOL $FILE
SELECT * FROM TABLENAME;
SPOOL OFF
EXIT
EOF
现在,当我手动运行import.sh时,它成功导入表并创建csv文件,而cron作业似乎运行,因为它生成了importLog.txt(这是空白的),但它从未创建一个csv文件。
答案 0 :(得分:3)
Cron的工作与非常贫穷的人一起工作#34;环境。您可能需要设置环境变量以找到tnsnames
配置文件。您还期望sqlplus
位于命令路径上,如果您之前未在crontab中设置它,则可能不会这样 - 我强烈建议您将完整路径放到sqlplus你脚本中的二进制文件最后,添加
MAILTO=your@email.addr
早期在您的crontab中确保您收到包含错误通知的电子邮件(假设您的sendmail配置设置正确)。
答案 1 :(得分:2)
除了将stderr重定向到您的日志文件
之外MediaPlayer.create()
注意:如果您想要一个正在运行的日志(追加),那么:
import.sh > import.log 2>&1
您可能想要添加 每当sqlerror退出sql.sqlcode 在shell脚本中,以确保捕获错误:
import.sh >> import.log 2>&1
使用邮件和日志
如果要将stdout和stderr重定向到日志文件和邮件,可以在大多数* nix系统上执行此操作:
sqlplus -s user/password << EOF
whenever sqlerror exit sql.sqlcode;
...
EOF
这样,您既可以运行日志文件,也可以使用电子邮件警报(stderr和stdout)。如果需要,您还可以为crontab中的每个脚本设置不同的日志文件和/或电子邮件地址。