如何在服务矩阵applicationManifest或serviceManifest中控制服务执行顺序?

时间:2019-03-07 14:18:35

标签: azure azure-service-fabric

在我的ServiceManifest.xml中,我有两个codePackages: 第一个代码包具有一个设置入口点 A 和一个入口点 B

  <CodePackage Name="Code" Version="1.0">
<SetupEntryPoint>
  <ExeHost>
    <Program>A.bat</Program>
    <WorkingFolder>CodePackage</WorkingFolder>
  </ExeHost>
</SetupEntryPoint>
<EntryPoint>
  <ExeHost>
    <Program>B.exe</Program>
    <WorkingFolder>Work</WorkingFolder>
  </ExeHost>
</EntryPoint>

第二个代码包的一个入口点 c

  <CodePackage Name="anotherCode" Version="1.0">
<EntryPoint>
  <ExeHost>
    <Program>C.exe</Program>
    <WorkingFolder>Work</WorkingFolder>
  </ExeHost>
</EntryPoint>

我要开始的顺序是A> B> C,这意味着B将在A成功之后执行,C将在B成功之后执行。现在,由于A在A下,A将被执行原基。但我不知道如何控制B和C的顺序。

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定此执行链的确切目的,但是您尝试执行的操作不起作用。

SetupEntryPoint 旨在作为初始化脚本执行,以设置主程序(可执行文件)启动所需的环境,例如创建文件夹,安装依赖项,复制数据等。它是一个特权入口点,默认情况下,它以与Service Fabric(通常为NETWORKSERVICE帐户)相同的凭据运行,而不是任何其他入口点。 SetupEntryPoint 避免了长时间运行具有高特权的服务主机。

EntryPoint 是创建服务时将始终运行的主程序(可执行程序),在服务结构要求之前,它并不意味着要完成(停止),如果服务结构确实停止,则该服务面料会将其视为失败,然后重新启动。

CodePackage 用于将多个程序(可执行文件)作为一个单独的服务加入该服务包中,当针对这些服务类型之一实例化一个服务时,清单中声明的​​所有代码包都将通过运行其入口点激活。通常在以下情况中使用:必须在同一节点上同时运行的两个可执行文件,其中一个示例是主应用程序,而一个日志收集器或监视主应用程序的看门狗应用程序。当一个应用程序启动时,完整的程序包将被复制到节点并激活代码包。

如果您尝试创建执行链,则应该:

  • 创建服务以保留此控件,并根据需要创建(启动)和删除(停止)这些程序包,或者
  • 创建一个脚本作为入口点,可以在先前完成后继续运行这些可执行文件