#shell #sqlplus #aix #mailx
#оболочка #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:
Использование документа оболочки «Здесь» является обычным решением, т.Е.
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 env путь к исполняемому файлу sqlplus.
Затем вам нужен идентификатор пользователя с доступом к средству cron. Вы знаете, как использовать редактор ‘vi’? При вызове crontab
вы будете просматривать запланированные задания текущего пользователя, и вам нужно будет управлять файлом с помощью команд ‘vi’. (Возможно, можно переопределить, какой редактор использовать, но не рекомендуется)
Вам нужно прочитать справочную страницу для cron, т. е. man cron
, и вы вызовете приведенный выше скрипт как завершенный. Запись cron будет выглядеть следующим образом
59 23 31 12 * { var=x; export var ; myCommand ; } > /tmp/myWorkDir/myCommand.trace 2>amp;1
min
hr
day
mon
(DayOfWeek)
значениями для даты / времени могут быть списки, разделенные запятыми (0,15,30,45), диапазоны, разделенные дефисом (4-6) или * для обозначения всех допустимых значений.
Это фиксирует любой вывод, включая stderr, с первого запуска myCommand в файл в tmpDir.
Минимальная версия вышеупомянутого будет
59 23 12 31 * var=x; export var ; myCommand
и затем любой вывод отправляется в локальный почтовый ящик пользователя.
Я надеюсь, что это поможет.
Комментарии:
1. Меня не столько волнует планирование, сколько получение этих команд в .sh, которые я могу выполнить. После того, как у меня будет .sh, я могу запланировать это без проблем. Если я просто вставлю эти файлы в файл .sh и запущу его, я получу запрос SQL>. Как заставить команды SQLPlus автоматически выполняться в .sh?
2. Также обратите внимание, что поиск «sqlplus here document» здесь, в S.O., показывает, что другие люди используют
sqlplus -s ...
. Мой опыт работы с Sybase isql, поэтому я полагаюсь на то, что рекомендовали другие, когда дело доходит до правильных аргументов / опций для sqlplus. Удачи.