【问题标题】:Service Fabric SetupEntryPointService Fabric 设置入口点
【发布时间】:2017-04-27 01:21:49
【问题描述】:

我有一个需要访问共享驱动器(Azure 文件)的来宾可执行文件。我的来宾可执行文件是在 ServiceManifest.xml 中设置的。我尝试添加一个以启动“mysetup.bat”文件,该文件具有 NET USE 命令,用于设置与我的 Azure 文件共享的连接。但是,我收到以下模糊错误:

错误事件:SourceId='System.Hosting', 属性='CodePackageActivation:代码:SetupEntryPoint'。有一个 CodePackage 激活期间出错。服务主机终止于 退出代码:1

以前有人试过吗?或者至少有关于如何获得比超级有用的“退出代码:1”更多信息的任何提示?

【问题讨论】:

  • 您好,我也有同样的问题,我的有用退出代码是 3。您找到解决方案了吗?

标签: azure azure-service-fabric


【解决方案1】:

SetupEntryPoint 是启动启动任务的正确位置。但是,根据您的启动任务,您可能需要在 ApplicationManifest.xml 中指定 RunAsPolicy。

这是我所做的:

创建了一个名为“setup.bat”的 BAT 文件并将其添加到我的来宾可执行代码文件夹中。在此 setup.bat 文件中,我正在执行 NET USE 语句以将网络驱动器映射到 Azure Files 共享文件夹。

我添加了这个:

<SetupEntryPoint>
  <ExeHost>
    <Program>setup.bat</Program>
    <Arguments></Arguments>
  </ExeHost>
</SetupEntryPoint>

到 ServiceManifest 节点。

<Policies>
     <RunAsPolicy CodePackageRef="Code" UserRef="SetupAdminUser" EntryPointType="All" />
</Policies>

进入 ServiceManifestImport 节点...

然后添加以下内容

  <Principals>
    <Users>
      <User Name="SetupAdminUser">
        <MemberOf>
          <SystemGroup Name="Administrators" />
        </MemberOf>
      </User>
    </Users>
  </Principals>

在 DefaultServices 节点之后进入 ApplicationManifest。 Principals 节点位于 DefaultServices 节点之后,这一点很重要。不知道为什么,但它会导致无法将应用程序部署到您的集群。

【讨论】:

  • 嗨,我试过这个和文档所说的内容,但我仍然收到错误消息。我还尝试了一个空的 setup.bat 文件,它一直说:ServiceHostProcess:MySetup.bat 开始于 ‎2017‎-‎02‎-‎13T19:56:50.841058400Z,进程 ID 为 4656 的 ApplicationId bc9bf792-57c6-42d6-95b8 -3350de901357 在节点 id eec59d298de9d615a03ae3ffd119e699 上意外终止,退出代码为 1 错误事件:SourceId='System.Hosting',Property='CodePackageActivation:Code:SetupEntryPoint'。 CodePackage 激活过程中出错。服务主机以退出代码终止:1 知道吗?
  • 感谢您分享您的代码。我试过了,但是当我部署到 Azure 时得到了相同的结果,而不是本地。但是有一个区别,我认为在您的代码中您正在部署一个来宾 exe,而我正在部署一个 Web API。你能看看我的代码。这是带有您的配置 xml 的全新项目。字面意思:打开 VS,新项目,添加你的 XML ......提前感谢1drv.ms/u/s!AmWSNr4-2JqMiakLiIMoSZeLUzttJA
  • 你找到解决方案了吗@ErickB,我正在经历同样的事情
  • @poul-k-sørensen 不,我没有。如果您找到它,请在此处发布。谢谢
  • @poul-k-sørensen 检查我刚刚发布的新答案。希望对你有帮助。
【解决方案2】:

在我的情况下,我解决了错误:“CodePackageActivation:Code:SetupEntryPoint 在 CodePackage 激活期间出现错误。服务主机以退出代码终止:1”

通过将我的安装脚本移动到 ps1 文件并从 MySetup.bat

执行它

所以我在 .bat 和 .ps1 文件中添加了以下内容。

  1. 在我的 MySetup.bat(您在服务清单中引用的那个)中:

powershell.exe -ExecutionPolicy Bypass -Command ".\MySetup.ps1"

  1. 在我的 MySetup.ps1 中(在此处添加您自己的 PowerShell 脚本):

netsh http 添加 urlacl url=http://erick1.com:80/ user="NT AUTHORITY\NETWORK SERVICE"

如何调试:

远程桌面您的虚拟机并转到“D:\SvcFab_App[YOUR SERVCE TYPE NAME HERE]\log”并检查 .err 和 .out 文件。不要忘记添加到您的服务清单中。整个部分将是:

<SetupEntryPoint>
  <ExeHost>
    <Program>MySetup.bat</Program>
    <WorkingFolder>CodePackage</WorkingFolder>
    <ConsoleRedirection FileRetentionCount="10"/>
  </ExeHost>
</SetupEntryPoint>

最后一件事:在我的情况下,我的 .bat 文件中有一个特殊字符,在 Visual Studio 中不可见,我的设置失败了......我只能通过阅读日志来发现它(如上所述) .不要害怕日志,在这种情况下通常是一行。

谢谢

【讨论】:

  • +1 关于“.bat 文件中的特殊字符”的评论。我的问题可能是同样的事情。当我的 SetupEntryPoint EXE 尝试执行时,UTF-8 BOM 字符会导致问题。我通过将我的 bat/ps1 文件直接复制到其中一个 VM 并尝试在那里执行它来找到它。这样很快就发现了错误!
  • @PatrickSteele 谢谢!这个 BOM 是我所有痛苦的根源,而这个评论是我在任何地方发现的唯一提到它的东西。
  • 你是如何解决这个问题并摆脱特殊字符的?
【解决方案3】:

我认为这是因为它以 SYSTEM 身份运行,没有用于创建驱动器映射的用户配置文件。

【讨论】:

  • 关于如何安装 Azure 文件共享以便我的来宾可执行文件可以使用它的任何想法?
  • 在工作角色中,我们有“启动任务”,但在 Service Fabric 中似乎没有直接的地方。
  • 我想我可能已经找到了答案。 docs.microsoft.com/en-us/azure/service-fabric/… 可能需要设置 RunAsPolicy 以允许 SetupEntryPoint 可执行文件挂载驱动器。
  • 不确定您的服务是否可以看到该映射,除非您以同一用户身份运行它。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 2016-10-15
  • 2016-12-08
  • 2015-08-08
  • 2019-03-14
  • 2018-01-09
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多