Perl system () не ждет в нано-сервере - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь запустить скрипт Perl в док-контейнере на основе Windows 2016 Nano Server. Для этого я использую ActivePerl 5.24.

Теперь я столкнулся с интересной проблемой, когда вызов system () ведет себя по-разному на моем сервере 2016 года и в контейнере Nano Server 2016 года.

#!/usr/bin/perl

use strict;
use warnings;

my $status = system('perl.exe -c test.plx');
print "Return: " . $status . "\n";
print "Exit: " . ($status >> 8) . "\n";
print "Signal: " . ($status & 127) . "\n";
print "Message: $!\n";

На хосте Windows 2016 Server он работает как положено:

c:\>perl test.plx
test.plx syntax OK
Return: 0
Exit: 0
Signal: 0
Message:

На сервере Nano в моем контейнере Docker это выглядит так:

C:\>perl test.plx
Return: 768
Exit: 3
Signal: 0
Message:

Итак, как вы видите, вывод отсутствует, а код возврата не равен 0.

Если я сейчас нажму return ..

C:\>
C:\>test.plx syntax OK

Так что похоже, что system () не ждет и возвращает 768 (что бы это ни значило)

Я также пытался использовать "ping -v" вместо "perl -c", но происходит то же самое, поэтому это должно быть что-то, связанное с реализацией system ().

Кто-нибудь знает, почему один и тот же вызов ведет себя совершенно по-разному в контейнере Docker и что я мог сделать, чтобы заставить system () ждать?

Обновление: Я подтвердил, что это работает, когда я использую microsoft / windowsservercore в качестве базового образа. Так что все, что здесь происходит, похоже, относится к Nano Server.

1 Ответ

0 голосов
/ 17 января 2019

Я получил ответ от службы поддержки ActiveState по этой проблеме.

Стандартные сборки ActiveState не поддерживаются на серверах Nano. В Nano слишком много недостающих компонентов. Если вы заинтересованы в создании пользовательской сборки, я могу связать вас с нашей командой продаж, и они могут описать наше предложение уровня Enterprise.

Похоже, что если я захочу использовать Nano-сервер, мне придется подождать, пока кто-нибудь решит внедрить его в стандартную сборку, или мне нужно переключиться на другой дистрибутив Perl.

До тех пор я буду использовать Server Core, который работает.

...