我有我需要的命令。如果我在提示符下执行这些命令,一切都按预期工作。 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文件中以便我可以安排它。救命!?并且在此先感谢,我确信这非常愚蠢。
答案 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
然后将任何输出发送到用户的本地邮箱。
我希望这会有所帮助。