用于在AIX中使用Mailx通过电子邮件发送SQLPlus查询结果的Shell脚本

时间:2011-06-08 19:31:40

标签: shell sqlplus aix mailx

我有我需要的命令。如果我在提示符下执行这些命令,一切都按预期工作。 SQLPlus运行查询,将结果导出到文件,然后将Mailx电子邮件导出到我。

sqlplus username/pwd@instance
SPOOL /home/sadmin/sqlmail/spool.out
set linesize 2000
set wrap off
@/home/sadmin/sqlmail/query.sql
SPOOL OFF
exit
mail -s "Subject" email@address.com < /home/sadmin/sqlmail/spool.out

但是,对于我的生活,我不能弄清楚如何将它们放在.sh文件中以便我可以安排它。救命!?并且在此先感谢,我确信这非常愚蠢。

1 个答案:

答案 0 :(得分:2)

使用shell“Here”文档是通常的解决方案,即

 cat MyCommand.sh
 #!/bin/bash  # (or ksh, sh, etc)
 PATH=.../path/to/sqlplusdir:${PATH}

sqlplus username/pwd@instance <<EOS
    SPOOL /home/sadmin/sqlmail/spool.out
    set linesize 2000
    set wrap off
    @/home/sadmin/sqlmail/query.sql
    SPOOL OFF
    exit
EOS
mail -s "Subject" email@address.com < /home/sadmin/sqlmail/spool.out

您需要设置PATH环境以包含sqlplus可执行文件的路径。

然后您需要一个可以访问cron工具的userID。你知道如何使用'vi'编辑器吗?当您致电crontab时,您将查看当前用户的预定作业,您需要使用'vi'命令操作该文件。 (可以覆盖使用哪个编辑器,但不建议使用)

您需要阅读cron的手册页,即man cron,您将在上面调用一个完整的脚本。 cron条目看起来像

59 23 31 12 * { var=x; export var ; myCommand ; } > /tmp/myWorkDir/myCommand.trace 2>&1 

min
   hr
     day
       mon
          (DayOfWeek)

日期/时间的值可以是逗号分隔列表(0,15,30,45),连字符分隔范围(4-6)或*以指示所有有效值。

这会捕获包括stderr在内的任何输出,从myCommand的1次运行到tmpDir中的文件。

以上的最低版本将是

59 23 12 31 * var=x; export var ; myCommand

然后将任何输出发送到用户的本地邮箱。

我希望这会有所帮助。