星尘代理StarAgent属于星尘服务平台的一部分,它自身注册为系统服务,支持Windows服务和Linux的systemd。StarAgent支持配置守护应用,在它启动时拉起目标应用,运行过程中定时检测目标应用进程,如果目标进程异常退出,它会再次拉起应用进程,保障业务的持续性。守护应用的功能,即使在没有配置服务端的情况下,也可以单机工作。

因此,StarAgent能够把普通应用(非桌面应用)“变成”后台服务,而不需要应用本身做任何修改

星尘的安装部署可以参考 《星尘代理安装与设置》《星尘代理企业级部署》

StarAgent把需要守护的应用信息配置到文件 Config/StarAgent.config 中。

先看例子:

<?xml version="1.0" encoding="utf-8"?>
<StarAgent>
  <!--调试开关。默认true-->
  <Debug>true</Debug>
  <!--证书-->
  <Code></Code>
  <!--密钥-->
  <Secret></Secret>
  <!--本地端口。默认5500-->
  <LocalPort>5500</LocalPort>
  <!--更新通道。默认Release-->
  <Channel>Release</Channel>
  <!--延迟时间。重启进程或服务的延迟时间,默认3000ms-->
  <Delay>3000</Delay>
  <!--应用服务集合-->
  <Services>
    <ServiceInfo Name="cube" FileName="dotnet" Arguments="cube.dll urls=http://*/" WorkingDirectory="../cube/" UserName="" Enable="true" Mode="Default" MaxMemory="0" />
  </Services>
</StarAgent>

需要守护的应用配置在Services段,每个应用就是一个ServiceInfo。

/// <summary>名称。全局唯一,默认应用名,根据场景可以加dev等后缀</summary>
[XmlAttribute]
public String Name { get; set; }

/// <summary>文件名。启动进程时使用,如果是zip文件则内部经过处理</summary>
[XmlAttribute]
public String FileName { get; set; }

/// <summary>参数。启动进程时使用</summary>
[XmlAttribute]
public String Arguments { get; set; }

/// <summary>工作目录。启动进程时使用</summary>
[XmlAttribute]
public String WorkingDirectory { get; set; }

/// <summary>用户。以该用户执行应用</summary>
[XmlAttribute]
public String UserName { get; set; }

/// <summary>启用</summary>
[XmlAttribute]
public Boolean Enable { get; set; }

/// <summary>服务工作模式。0默认exe/zip;1仅解压;2解压后运行;3仅运行一次;4多实例exe/zip</summary>
[XmlAttribute]
public ServiceModes Mode { get; set; }

/// <summary>最大内存。单位M,超过上限时自动重启应用,默认0不限制</summary>
[XmlAttribute]
public Int32 MaxMemory { get; set; }

各个配置如下:

  • Name。应用名称,本地唯一
  • FileName。文件名,可以使用全路径,一般只写文件名,此时去WorkingDirectory目录查找。NETCore应用这里填写 dotnet ,也可以zip压缩包名字。
  • Arguments。进程参数,NETCore应用这里写 cube.dll urls=http://*/,就是平时dotnet命令后面那一部分。
  • WorkingDirectory。工作目录,一般用于查找FileName,可以是相对于StarAgent的目录。
  • UserName。用户名,以指定用户运行,在Linux系统中会自动授权目录给该用户。
  • Enable。是否启用,一般为true。
  • Mode。工作模式。默认Default直接启动应用,或者解压启动zip。0默认exe/zip;1仅解压;2解压后运行;3仅运行一次;4多实例exe/zip。
  • MaxMemory。最大内存。单位M,超过上限时自动重启应用,默认0不限制


最后再来看一个Linux工控机上的配置,供参考:

<?xml version="1.0" encoding="utf-8"?>
<StarAgent>
  <!--调试开关。默认true-->
  <Debug>true</Debug>
  <!--证书-->
  <Code></Code>
  <!--密钥-->
  <Secret></Secret>
  <!--本地端口。默认5500-->
  <LocalPort>5500</LocalPort>
  <!--更新通道。默认Release-->
  <Channel>Release</Channel>
  <!--延迟时间。重启进程或服务的延迟时间,默认3000ms-->
  <Delay>3000</Delay>
  <!--应用服务集合-->
  <Services>
    <ServiceInfo Name="flower" FileName="GirlFlower" Arguments="" WorkingDirectory="/home/feifan/flower/" Enable="true Mode="Default" />
  </Services>
</StarAgent>
  • 这里的flower,它有一个Linux可执行文件 GirelFlower,因此没有参数。