Приложение-функция Azure останавливается случайным образом и не запускает исполняемый файл

Я пытаюсь настроить приложение Function, которое запускает исполняемый файл. Я использую функцию, запускаемую по протоколу http, и сначала мне нужно загрузить некоторые файлы в определенные места, а затем запустить exe.

У меня есть несколько маленьких файлов, которые я беру из хранилища BLOB-объектов и помещаю в папку.\ Wwwroot\ExternalFiles. Затем у меня есть 2 больших файла, включая exe (~50 МБ), которые идут в другую папку.\ Wwwroot\Sim.

Как только все файлы на месте, я запускаю exe.

Я пробовал разные комбинации и места, но exe не работает должным образом или не работает вообще. Странно то, что иногда приложение застревает, передавая последние 2 файла. Они на самом деле передаются, но живой журнал терминала больше не связывается. И через некоторое время это просто ошибки с кодом 500.

Вот мой код (он отлично работает в моей локальной среде):

var containerName = "simulationfiles";
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=.....");
CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);

// ExternalFiles
CloudBlob blob = container.GetBlobReference("Aeromap_AEM.aem");
await blob.DownloadToFileAsync(@"D:\home\site\wwwroot\ExternalFiles\Aeromap_AEM.aem", FileMode.OpenOrCreate);
log.LogInformation("Aeromap_AEM.aem copied to ExternalFiles folder");

blob = container.GetBlobReference("BiasVsPlungerForce.txt");
await blob.DownloadToFileAsync(@"D:\home\site\wwwroot\ExternalFiles\BiasVsPlungerForce.txt", FileMode.OpenOrCreate);
log.LogInformation("BiasVsPlungerForce.txt copied to ExternalFiles folder");

blob = container.GetBlobReference("EngineFile.eng");
await blob.DownloadToFileAsync(@"D:\home\site\wwwroot\ExternalFiles\EngineFile.eng", FileMode.OpenOrCreate);
log.LogInformation("EngineFile.eng copied to ExternalFiles folder");

[...several more files...13 files in total]

// ModelFiles
blob = container.GetBlobReference("dsin.txt");
await blob.DownloadToFileAsync(@"D:\home\site\wwwroot\Sim\dsin.txt", FileMode.OpenOrCreate);
log.LogInformation("dsin.txt copied to ExternalFiles folder");

blob = container.GetBlobReference("SetupExperiment.temp");
await blob.DownloadToFileAsync(@"D:\home\site\wwwroot\Sim\SetupExperiment.temp", FileMode.OpenOrCreate);
log.LogInformation("SetupExperiment.exe copied to ExternalFiles folder");
System.IO.File.Move(@"D:\home\site\wwwroot\Sim\SetupExperiment.temp", @"D:\home\site\wwwroot\Sim\SetupExperiment.exe");

// Run the model
int modelTimeout = 1000;
double modelProcessTime;
bool modelTimedout = false;
Directory.SetCurrentDirectory(@"D:\home\site\wwwroot\Sim");
Process p = new Process();
p.StartInfo.FileName = @"D:\home\site\wwwroot\Sim\SetupExperiment.exe";
p.StartInfo.Arguments = @"D:\home\site\wwwroot\Sim\dsin.txt D:\home\site\wwwroot\Sim\SetupExperimentResults.mat";
p.StartInfo.WorkingDirectory = @"D:\home\site\wwwroot\Sim";
p.Start();
Thread.Sleep(2000); //allows the process to be created
modelProcessTime = p.TotalProcessorTime.TotalSeconds;
Thread.Sleep(1000);
while (!modelTimedout)
{
    // Check if the process is done (processtime doesn't increase anylonger
    if (modelProcessTime == p.TotalProcessorTime.TotalSeconds)
    {
        modelTimedout = true; // model done running
    }
    modelProcessTime = p.TotalProcessorTime.TotalSeconds; // update process time
    log.LogInformation( System.Convert.ToString(modelProcessTime) );
    if (modelProcessTime > modelTimeout)
    {
        p.Kill();
        modelTimedout = true;
    }
    Thread.Sleep(2000);
}

Весь код находится в попытке / поймать, но я не получаю никакого журнала ошибок. Как я уже упоминал, после сбоя приложения я возвращаюсь в терминал (из браузера) и все файлы есть, поэтому они успешно скопированы. Я действительно не уверен, что происходит, и я даже не уверен, как отладить это.

Что-то явно не так в коде? Любые предложения будут потрясающими. PS: настоящий новичок здесь, так что не смейтесь слишком сильно над моим кодом:)

ОБНОВЛЕНИЕ 1

Я только что запустил exe из cmd в Куду, и это работает. Так что, похоже, это не проблема exe. Может быть, как-то связано с хранением и таймаутами? Или, может быть, разрешения... просто стрельба в темноте

0 ответов

Другие вопросы по тегам