星尘代理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,因此没有参数。