Crontab проблема с Perl-скриптом - PullRequest
0 голосов
/ 01 декабря 2011
system("$sqlldr $oracleLogon control=$ctlFile log=$logFile data=$dateFile"); 

Над последней строкой моего Perl-скрипта. Когда я запускаю скрипт, содержащий эту строку вручную (из cli), он работает. Но когда я помещаю это в crontab, получаю неудачу.

Переменная $sqlldr содержит полный путь к сценарию Oracle sqlldr, включая его. Конечно, все переменные, содержащие полный путь, включая имена файлов.

Кроме того, мой скрипт много раз вызывает "system", и все они работают нормально, ожидая последней этой строки. Я использую 64-битный сервер Ubuntu 10.04 и помещаю свой скрипт в crontab пользователя oracle.
Я действительно не могу терпеть, что там происходит. Может ли кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Проверьте разницу между средами в случае CLI и cron - это будет ключом к пониманию проблемы.

Непосредственно перед вызовом вашей системы (..) в perl введите:

system("env > ~/env_in_cron.txt");

и сравните это с env , вызываемым в CLI.

2 голосов
/ 01 декабря 2011

Когда скрипт работает в командной строке, но не с crontab, это часто происходит из-за различий в среде.

В вашем случае вы пытаетесь запустить инструмент Oracle.И все инструменты Oracle нуждаются в переменной окружения ORACLE_HOME.Эти переменные задаются при использовании терминала, но , а не при использовании crontab.

В вашем сценарии попробуйте установить и экспортировать ORACLE_HOME в клиент Oracle перед запуском SQL * Loader.

И, пожалуйста, оставьте сообщение об ошибке.Если это произойдет автоматически, попробуйте перенаправить STDOUT и STDERR в файл из вашего вызова crontab и опубликуйте результат.

...