需要了解如何在 azure vm linux 中运行简单的 shell 脚本

Posted

技术标签:

【中文标题】需要了解如何在 azure vm linux 中运行简单的 shell 脚本【英文标题】:Need to understand how to run a simple shell script in a azure vm lunix 【发布时间】:2021-08-25 15:16:52 【问题描述】:

我正在关注此文档并尝试使用此文档在 VM 中运行 shell 脚本:

https://docs.microsoft.com/en-us/rest/api/compute/virtual-machines-run-commands/run-command

我的第一个问题是:当我使用一个简单的脚本时,例如在 post 方法的输入中输入 'ls',我得到状态 202 并且没有结果消息,谁能告诉我为什么?

我的第二个问题是:我想运行一个脚本文件myscript.sh 并传递一些参数给它。但我不知道如何在输入中将参数传递给脚本

谁能帮我理解或告诉我怎么做,我正在使用 .NET 和 C#。

这是我现在的代码

using (var client = new HttpClient())

    Body body = new Body
                    
                         commandId = "RunShellScript",
                         script = new List<string>  "ls"
                    ;

    // Generate Bearer Token
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    string managementApiUrl = "https://management.azure.com/";
    var accessToken = azureServiceTokenProvider.GetAccessTokenAsync(managementApiUrl, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").Result;
            
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

    // Call Post Method
    HttpResponseMessage response = await client.PostAsJsonAsync("https://management.azure.com/subscriptions/xxxx/resourceGroups/xxx/providers/Microsoft.Compute/virtualMachines/simpleLinuxVM/runCommand?api-version=2021-03-01", body);

    // Fetch Result
    if (response.IsSuccessStatusCode)
    
        string finalResponse = await response.Content.ReadAsStringAsync();

        Console.WriteLine(string.Format("Result:", finalResponse.ToString()));
    
    else
    
        Console.WriteLine(string.Format("The request failed with status code: 0", response.StatusCode));
  
        string responseContent = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseContent);
    

【问题讨论】:

【参考方案1】:

根据你这里写的代码

script = new List<string> "ls"

“ls”将被视为“脚本”对象列表中的字符串。这就是为什么您没有得到任何结果的原因,尽管有 s Success 状态。

我发现了与您的问题相关的类似thread。为此,您可以制作 myscript。 sh 使用下面的代码运行。

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "YourFile.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "";//Arguments should be here
using (Process exeProcess = Process.Start(startInfo))

    exeProcess.WaitForExit();


并使用 exeProcess.StandardOutput.ReadToEnd(); 获取结果。

【讨论】:

以上是关于需要了解如何在 azure vm linux 中运行简单的 shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

Azure上批量创建OS Disk大于30G的Linux VM

Azure Linux VM密钥登录

ElasticSearch快照创建 - 了解如何/在何处存储它们

如何为azure虚拟机创建双网卡

Azure磁盘加密Linux VM密钥轮换

使用Azure Monitor从Azure VM收集数据