Думаю, проблема не в том, как Informatica выполняет команды. Проблема заключается в том, как DOS возвращает коды ошибок и, в частности, в том, что некоторые команды, такие как IF
и ECHO
, этого не делают. (Код возврата, который Informatica получает из DOS, можно увидеть с помощью echo %ERRORLEVEL%
в DOS, и я буду использовать здесь имя DOS для удобства, хотя сейчас в Windows это не совсем правильно)
Выполните следующие команды по очереди:
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 0
cd c:\
echo %ERRORLEVEL%
REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged
echo.bob >> c:\filename.txt
echo %ERRORLEVEL%
REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged
echo.bob >> c:\thisdirdontexist\filename.txt
echo %ERRORLEVEL%
Первый CD
устанавливает код возврата, в данном случае 0.
Следующий ECHO
(с тестом IF или без него) не меняет код возврата, поэтому он остается 0, даже если последний ECHO
завершился неудачно.
Если бы первая команда CD
возвратила бы ошибку;
@echo off
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 1
cd xxxxxx
echo %ERRORLEVEL%
тогда все последующие ECHO
вернут 1, и Informatica откажет им обоим.
Это говорит о том, что это все еще странно, поскольку каждая команда успеха после сеанса в Informatica выполняется под своей собственной cmd-оболочкой, поэтому начальный ERRORLEVEL
для каждой команды всегда должен быть 0. Я не могу это объяснить и, к сожалению, я не могу фактически протестировать это в Informatica, поскольку мы работаем под UNIX, но я почти уверен, что это, по крайней мере, часть проблемы.
Чтобы обойти проблему, убедитесь, что вы установили опцию «Сбой задачи при сбое какой-либо команды» на вкладке свойств. Это заставляет Informatica использовать параметр cmd/c
, и поскольку он устанавливает правильный код возврата, Informatica должна иметь возможность правильно определить ошибку (или успех). Если это по-прежнему не работает должным образом, попробуйте самостоятельно изменить команду на:
cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"
person
whetstone
schedule
30.10.2013