我正在尝试通过创建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时,它会提示输入我不知道的密码。
如何克服这个问题?
答案 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)