Azure Batch Linux vm运行脚本

时间:2017-04-18 07:12:27

标签: python linux azure azure-batch

我正在尝试通过创建linux vm来使用Azure批处理服务。我有一些计算,我正在使用python。要安装一些python包,我已将安装命令放在脚本文件中并尝试在启动时运行它。

 pool.StartTask = new StartTask
            {
                // Specify a command line for the StartTask that copies the task application files to th
                 CommandLine = "bash -c \"bash /mnt/batch/tasks/startup/wd/installpackages.sh\"",
                ResourceFiles = resourceFiles,
                WaitForSuccess = true,
                MaxTaskRetryCount = 5
            };

由于权限问题,此脚本执行失败。当我尝试使用“sudo”运行脚本时,会发生以下错误,

sudo: no tty present and no askpass program specified

脚本由用户“_azbatch”执行,并且在使用sudo时,它会提示输入我不知道的密码。

如何克服这个问题?

2 个答案:

答案 0 :(得分:1)

如果您使用的是Azure Batch C#SDK 6.0.0或更高版本(或Azure Batch Python SDK 2.0.0或更高版本),则需要在UserIdentity对象中指定正确的StartTask

pool.StartTask.UserIdentity = new UserIdentity(
    new AutoUserSpecification(
        scope: AutoUserScope.Pool,
        elevationLevel: ElevationLevel.Admin
    )
)

如果您使用的是之前的SDK版本,则需要将StartTask对象RunElevated成员设置为true

使用这些选项,您应该从脚本中删除sudo,因为您的脚本将自动以超级用户或管理员权限运行。

另外一条关于:

的说明
/mnt/batch/tasks/startup/wd/installpackages.sh

你永远不应该直接引用这条路径。您可以改为使用:

bash -c "bash $AZ_BATCH_TASK_WORKING_DIR/installpackages.sh"

或简单地说:

bash ./installpackages.sh

您甚至可以通过在shell脚本的顶部添加适当的shebang语句并调用bash来删除./installpackages.sh显式调用。

Batch将当前工作目录设置为任务的工作目录以执行命令。您可以查看Batch为任务执行here自动设置的所有环境变量。

答案 1 :(得分:-1)

根据您的描述,根据我的理解,您希望在Azure Batch Services批量创建的Azure Linux VM上安装相同的软件包。

根据我的经验,我认为您可以通过一些并行的SSH工具(例如psshorgalorgParallecerlyssh等在所有计算机上同时手动执行这些安装。这是一种解决方法。一些python软件包在安装时需要编译器支持,所以我认为在不确定性下手动操作可能是更好的选择。

希望它有所帮助。