Что может привести к сбою системных вызовов Perl?

Небольшая просьба :Я каждый день читаю вопросы о Perl от Stack Overflow и отвечаю/вношу свой вклад, где могу; сегодня мне нужна помощь сообщества!

Настройка Perl :Я использую Active Perl 5.8.8 в Windows. Установка выполняется на локальном диске сервера нашего отдела, который также находится в общем доступе в сети. Все пользователи отдела запускают Perl на своих ПК, указывая на установленный в этой сети -Perl. Это работало в течение многих лет и не вызывает проблем, но это информация, необходимая для понимания проблемы.

Рассматриваемый сервер также является нашим сервером «cron» (Scheduled Task ), обрабатывающим различные задачи автоматизации. Внезапно на прошлой неделе системные вызовы в Perl-скриптах (на сервере )начали давать сбой (, подробности ниже ). Сначала я подозревал, что установка Perl повреждена, но все клиентские ПК по-прежнему могут запускать одни и те же сценарии Perl без каких-либо проблем, что заставило меня думать, что это проблема сервера. Я дважды перезагружал сервер, и проблема не устранена, поэтому мне нужна помощь!

Вот несколько примеров различных способов сбоя системных вызовов, сведенных к Perl one -лайнерам:

% perl -e "system('dir')"

Это должно напечатать список «dir», но вместо этого он открывает оболочку sub -. Если я наберу «exit», я смогу выйти из оболочки sub -,и я вернулся в исходную оболочку (, что подтверждается проверкой истории оболочки с помощью клавиши со стрелкой ВВЕРХ ).

% perl -e "print `dir`"

Это на самом деле зависает. Вообще ничего не происходит. Если я нажму Ctrl -C, чтобы завершить процесс, я получу сообщение «Завершение по сигналу SIGINT (2 )», и вернется приглашение DOS. Но любые будущие команды в приглашении DOS (, даже простое нажатие ENTER ), вызывают ошибку «Процесс пытался записать в несуществующий канал». Вы должны выйти из командной строки DOS, так как это фактически бесполезно.

Последний пример:

% perl -e "system('Z:/Scripts/rebuild.pl')"

ebuild.pl не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

В этом случае Perl переключает прямую косую черту -(/ )на обратную косую черту DOS/Windows -(), что он прекрасно делал в течение многих лет. Но Perl интерпретирует "\r" в начале имени файла "rebuild.pl" как каретку -return (я думаю )и ищет оставшийся "ebuild.pl". Вызовы других имен сценариев, символы которых не могут быть неправильно истолкованы таким образом, приводят к вышеупомянутым зависаниям (, если вы используете обратные кавычки )открываемых оболочек sub -(для системных ()вызовов ).

Я не просто озадачен этим -Я в отчаянии! Задания «cron» нашего сервера отдела сейчас бесполезны, так как мы используем много системных вызовов.

Опять же, я не думаю, что это поврежденная установка Perl, так как сетевые пользователи могут работать нормально. Итак, что может произойти на отдельном компьютере (, не привязанном к самой установке Perl ), что может привести к такому сбою системных вызовов Perl?

Параметры среды по запросу:

ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\engmodem\Application Data
CDSROOT=Z:\Cadence\SPB_16.5
CDS_CONCEPT_NOSPLASH=TRUE
CDS_LIC_ONLY=1
CDS_SITE=Z:\Cadence\Sites\16.5
CHDL_LIB_INST_DIR=%CDSROOT%
CLIENTNAME=USENTUTTLJL3C
ClusterLog=C:\WINDOWS\Cluster\cluster.log
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=CORPUSAPP5
ComSpec=C:\WINDOWS\system32\cmd.exe
CONCEPT_INST_DIR=%CDSROOT%
FP_NO_HOST_CHECK=NO
HOMEDRIVE=H:
HOMEPATH=\
HOMESHARE=\\PF1\HOME
ICMHOME=Z:\Software\PTC\INTERC~1
INSTDIR=%CDSROOT%
LOGONSERVER=\\ENGMAHO5
LSF_BINDIR=Z:\Software\LSF\bin
LSF_ENVDIR=\\hwc151\LSF_6.2\etc
MESSAGE=BROADCAST
NUMBER_OF_PROCESSORS=2
OA_PLUGIN_PATH=%CDSROOT%\Share\oaPlugIns
OS=Windows_NT
Path=C:\Program Files\Legato\nsr\bin;Z:\oracle\ora92\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Windows Resource Kits\Tools\;Z:\Software\Perl\5.8.8\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\Program Files\Support Tools\;Z:\Software\LSF\bin;C:\Program Files\PHP\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\EMC RepliStor;C:\GitStack\python;C:\GitStack\python\Scripts;C:\GitStack\git\cmd;Z:\Scripts;Z:\bin;Z:\Cadence\SPB_16.5\tools\bin;Z:\Cadence\SPB_16.5\tools\fet\bin;Z:\Cadence\SPB_16.5\tools\pcb\bin;Z:\Cadence\SPB_16.5\OpenAccess\bin\win32\opt
PATHEXT=.COM;.EXE;.BAT;.PL;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.VBS
PCB_LIBRARY=16
PERL5SHELL=cmd
PHPRC=C:\Program Files\PHP\
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 29 Stepping 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=1d01
ProgramFiles=C:\Program Files
PROMPT=$P$G
PULLUP_DIFF_PAIRS=TRUE
SESSIONNAME=RDP-Tcp#1
SystemDrive=C:
SystemRoot=C:\WINDOWS
TZ=EST5EDT
VISUALSVN_SERVER=C:\Program Files\VisualSVN Server\
WF_RESOURCES=Z:\oracle\ora92\WF\RES\WFus.RES
windir=C:\WINDOWS
11
задан jimtut 18 June 2012 в 16:13
поделиться