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

发布于 2024-11-14 22:48:21 字数 516 浏览 11 评论 0原文

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

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

I have the commands that I need. If I execute these commands at the prompt, everything works as expected. SQLPlus runs the query, exports the result to a file and then Mailx emails that file to me.

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] < /home/sadmin/sqlmail/spool.out

But, I can not, for the life of me, figure out how to put these in an .sh file so that I can schedule it. Help!? And thanks in advance, I'm sure this is very silly.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

圈圈圆圆圈圈 2024-11-21 22:48:21

使用 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] < /home/sadmin/sqlmail/spool.out

您需要设置 PATH env 以包含 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

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

我希望这有帮助。

Using a shell 'Here' document is the usual solution, i.e.

 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] < /home/sadmin/sqlmail/spool.out

You'll need to set your PATH env to include the path to you sqlplus executable.

Then you need a userID with access to the cron facility. Do you know how to use the 'vi' editor? When you call crontab, you will be looking at the current users scheduled jobs and you will need to manipulate the file with 'vi' commands. (It may be possible to override which editor to use, but not recommended)

You need to read the man page for cron, i.e. man cron, and you will be call the above a a complete script. A cron entry will look like

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

min
   hr
     day
       mon
          (DayOfWeek)

values for date/times can be comma separated lists (0,15,30,45), hyphen separated ranges (4-6) or * to indicate all valid values.

This captures any output including stderr, from the 1 time run of myCommand into the file in the tmpDir.

The bare minimum version of the above would be

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

and then any output is sent to the user's local mailbox.

I hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文