Azure Batch Linux vm 运行 脚本
Azure Batch Linux vm running script
我正在尝试通过创建 linux 虚拟机来使用 Azure 批处理服务。我有一些计算,我正在使用 python.To 安装一些 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 Services 批量创建的 Azure Linux VM 上安装相同的包。
根据我的经验,我认为您可以通过 pssh, orgalorg, Parallec, erlyssh 等并行 SSH 工具在所有计算机上同时手动执行这些安装。这是一种解决方法。有些 python 包在安装时需要编译器支持,所以我认为在不确定的情况下手动操作可能是更好的选择。
希望对您有所帮助。
如果您使用的是 Azure Batch C# SDK 6.0.0 或更高版本(或 Azure Batch Python SDK 2.0.0 或更高版本),您需要在 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
您甚至可以删除 bash
显式调用,方法是在 shell 脚本的顶部添加适当的 shebang 语句并以 ./installpackages.sh
.
的形式调用
批处理会将当前工作目录设置为任务的工作目录以执行命令。可以查看Batch为任务执行自动设置的所有环境变量here.
我正在尝试通过创建 linux 虚拟机来使用 Azure 批处理服务。我有一些计算,我正在使用 python.To 安装一些 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 Services 批量创建的 Azure Linux VM 上安装相同的包。
根据我的经验,我认为您可以通过 pssh, orgalorg, Parallec, erlyssh 等并行 SSH 工具在所有计算机上同时手动执行这些安装。这是一种解决方法。有些 python 包在安装时需要编译器支持,所以我认为在不确定的情况下手动操作可能是更好的选择。
希望对您有所帮助。
如果您使用的是 Azure Batch C# SDK 6.0.0 或更高版本(或 Azure Batch Python SDK 2.0.0 或更高版本),您需要在 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
您甚至可以删除 bash
显式调用,方法是在 shell 脚本的顶部添加适当的 shebang 语句并以 ./installpackages.sh
.
批处理会将当前工作目录设置为任务的工作目录以执行命令。可以查看Batch为任务执行自动设置的所有环境变量here.