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

2024-06-19

我有我需要的命令。如果我在提示符下执行这些命令,一切都会按预期进行。 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 protected] /cdn-cgi/l/email-protection < /home/sadmin/sqlmail/spool.out

但是,我一生都无法弄清楚如何将它们放入 .sh 文件中以便我可以安排它。帮助!?预先感谢,我确信这是非常愚蠢的。


使用 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 protected] /cdn-cgi/l/email-protection < /home/sadmin/sqlmail/spool.out

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

然后您需要一个能够访问 cron 工具的用户 ID。你知道如何使用“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) 或 * 来指示所有有效值。

这会将 myCommand 的 1 次运行中的所有输出(包括 stderr)捕获到 tmpDir 中的文件中。

上述的最低版本是

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

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

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐