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