Azure云服务启动任务未运行

时间:2015-12-02 10:41:22

标签: hive odbc azure-web-roles azure-cloud-services startupscript

我正在尝试部署一个azure云服务Web角色,一个简单的应用程序来测试通过odbc连接到Hive。为了做到这一点,我需要在启动应用程序之前在机器上安装hive odbc驱动程序,这就是为什么我添加了一个调用powershell脚本来下载驱动程序的启动任务,而不是像这样安装它:

STARTUP.CMD

@echo off
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out  
powershell .\dlHiveOdbcDriver.ps1 2>> err.out
hiveodbc.msi /passive

dlHiveOdbcDriver.ps1

(new-object system.net.webclient).downloadfile('https://download.microsoft.com/download/F/4/A/F4A2CA7D-5D14-4177-A7CE-B938EF3F3C24/HiveODBC32.msi', 'hiveodbc.msi')

我的serviceDefinition具有以下代码来声明启动任务

<WebRole name="SomeTest" vmsize="ExtraSmall">
    <Startup>
      <Task commandLine="startup.cmd" taskType="simple" executionContext="elevated" />
    </Startup>
...
</WebRole>

但是,当我部署应用程序时,仍然会出现以下错误

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

暗示未安装驱动程序。 我已经尝试重新启动应用,确保所有pre-requisites (scripts in root folder, copy always, executionPolicy etc')都已应用,但无济于事。 不幸的是,由于办公室问题,我目前无法远程进入机器......

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

进行远程访问确实很有帮助,以便进行故障排除。我建议你从可以测试的PC上试一试。

但继承我的方法。在ServiceDefinition.csdef中,我有以下内容:     

  <Task commandLine=".\startuptasks\bootstrap.cmd" executionContext="elevated" taskType="simple">
  </Task>

我使用此bootstrap.cmd脚本来安装第三方组件:

ECHO The current version is %MyVersionNumber% >> ".\StartupLog.txt" 2>&1

cd startuptasks

PowerShell  -Command "Set-Executionpolicy Unrestricted" >> ".\excutionploicylog.txt" 2>&1
PowerShell  .\installCCP.ps1  >> ".\CCPStartupLog.txt" 2>&1
PowerShell  .\installOTHERSTUFF.ps1  >> ".\GSStartupLog.txt" 2>&1
EXIT /B 0

安装* .ps1文件的内容是:

$source = "http://YOUR_ACCOUNT.blob.core.windows.net/installer/vcredist_x64.exe"
$destination = "$($tempDir.Value)\vredistx64.exe"
Invoke-WebRequest $source -OutFile $destination  -Method Get
$p1 = Start-Process $destination -ArgumentList " /quiet /norestart" -wait -NoNewWindow -PassThru

确保使用“Copy if newer”将所有文件(.cmd和.ps1)复制到输出目录。

确保您可以使用Start-Process在本地安装。需要支持无提示安装。

如果有帮助,请告诉我。

答案 1 :(得分:0)

我差点忘了更新这个。 事实证明,Azure默认使用x64架构,用于他们在其云服务Web角色中托管在其VM上的IIS网站。最重要的是,他们还预装了一个Hive odbc驱动程序,但是他们使用的是x86驱动程序而不是x64驱动程序。我也试图安装x86驱动程序 - 所以任务正如它应该的那样工作。 I have raised an issue with Azure要解决这个问题,万一有人也遇到这个问题。