Azure Batch Linux vm running script



我正在尝试通过创建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 时,它会提示输入我不知道的密码。

如何克服这个问题?

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

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

如果您使用的是上述先前的 SDK 版本,则需要将成员RunElevatedStartTask对象设置为true

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

关于以下方面的补充说明:

/mnt/batch/tasks/startup/wd/installpackages.sh

切勿直接引用路径。您可以改用:

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

或者简单地:

bash ./installpackages.sh

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

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

根据你的描述,根据我的理解,你想在Azure Batch Services批量创建的Azure Linux VM上安装相同的包。

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

希望对您有所帮助。

最新更新