![]() |
VOOZH | about |
dotnet add package NewLife.Agent --version 10.13.2025.1001
NuGet\Install-Package NewLife.Agent -Version 10.13.2025.1001
<PackageReference Include="NewLife.Agent" Version="10.13.2025.1001" />
<PackageVersion Include="NewLife.Agent" Version="10.13.2025.1001" />Directory.Packages.props
<PackageReference Include="NewLife.Agent" />Project file
paket add NewLife.Agent --version 10.13.2025.1001
#r "nuget: NewLife.Agent, 10.13.2025.1001"
#:package NewLife.Agent@10.13.2025.1001
#addin nuget:?package=NewLife.Agent&version=10.13.2025.1001Install as a Cake Addin
#tool nuget:?package=NewLife.Agent&version=10.13.2025.1001Install as a Cake Tool
👁 GitHub top language
👁 GitHub License
👁 Nuget Downloads
👁 Nuget
👁 Nuget (with prereleases)
👁 Nuget Downloads
👁 Nuget
👁 Nuget (with prereleases)
使用教程:https://newlifex.com/core/agent
NewLife.Agent 是一个跨平台服务/守护进程开发与运行框架,帮助普通控制台 / Web / Worker / 数据处理等长期运行应用快速注册为 Windows 服务 或 Linux Systemd(以及其它 init 系统)并提供:安装/卸载/启动/停止/调试、健康监控、资源超限重启、定时重启、看门狗、多实例部署等能力。支持 .NET Framework 4.x 与 .NET (Core) 3.1+ 直至最新版本,多 Target 框架长期维护。
NewLife.Agent主要功能:
与同类工具不同:Agent 是“开发框架 + 运行管理”二合一,可直接在代码中扩展逻辑与命令;无需额外包装可执行文件。
核心基类 ServiceBase 负责:
Main(args):解析命令 → 交互菜单 / 命令执行IHost 实现(WindowsService / Systemd / OSXLaunch / Procd / RcInit / DefaultHost / WindowsAutorun)CommandFactory + 各种 *CommandHandler(安装、卸载、启动、停止、重启、运行、状态、看门狗等)Host.Restart(ServiceName) 触发平滑重启Host.RegisterExit 捕捉进程退出并清理日志主要流程:
Main → InitService → Init(选择 Host + 载入/保存配置) → 解析命令或显示菜单 → StartLoop/StopLoop → DoCheck(健康/看门狗)
public class MyService : ServiceBase
{
public MyService()
{
ServiceName = "DemoAgent"; // 服务名
DisplayName = "演示服务"; // 显示名
Description = "演示用后台服务"; // 描述
}
public override void StartWork(String reason)
{
WriteLog("业务启动: {0}", reason);
// TODO: 启动定时任务 / 网络监听 / 队列消费者等
base.StartWork(reason);
}
public override void StopWork(String reason)
{
WriteLog("业务停止: {0}", reason);
// TODO: 清理资源
base.StopWork(reason);
}
}
public static class Program
{
public static void Main(String[] args)
{
#if DEBUG
if (args == null || args.Length == 0) args = new[] { "-run" }; // 调试快速进入模拟运行
#endif
new MyService().Main(args);
}
}
运行 dotnet run 后出现交互菜单,可一键安装/启动。部署后使用 -install / -start 等命令行参数实现无人值守操作。
以 ASP.NET Core 为例(参见仓库 Zero.Web 示例):
public class WebAgent : ServiceBase
{
public Func<IHostBuilder> BuildHost { get; set; }
public WebAgent()
{
ServiceName = "WebAgent";
DisplayName = "Web服务代理";
Description = "承载 ASP.NET Core 的系统服务";
}
public override void StartWork(String reason)
{
var tokenSrc = new CancellationTokenSource();
BuildHost?.Invoke()?.Build().RunAsync(tokenSrc.Token); // 非阻塞运行
base.StartWork(reason);
}
}
public static class Program
{
public static void Main(String[] args)
{
#if DEBUG
if (args?.Length == 0) args = new[] { "-run" };
#endif
new WebAgent { BuildHost = () => Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(w => w.UseStartup<Startup>()) }.Main(args);
}
}
通过非阻塞
RunAsync嵌入宿主,实现 Web + Agent 统一的安装/运行/重启/监控治理。
运行无参数进入交互模式(黄色菜单),快捷键默认:
-status)-install / -uninstall)-start / -stop)-restart)-run,在当前进程内直接调用 StartWork,便于调试)常用无人值守命令(可脚本化):
MyApp.exe -install
MyApp.exe -start
MyApp.exe -stop
MyApp.exe -restart
MyApp.exe -status
MyApp.exe -uninstall
MyApp.exe -run // 控制台调试
MyApp.exe -autorun // 使用“登录自启动”模式(仅 Windows)
MyApp.exe -watchdog // 立即执行一次看门狗检查
所有操作需在管理员/root 权限下执行(安装/卸载/启动/停止)。
配置由 Setting.Current 提供(自动存储于应用配置目录),典型字段:
| 字段 | 说明 |
| ---- | ---- |
| ServiceName | 服务名(可通过部署目录复制后修改实现多实例) |
| DisplayName | 服务显示名 |
| Description | 服务描述 |
| UseAutorun | 是否使用登录自启动(Windows) |
| WatchInterval | 监控循环间隔(秒)默认数秒级,影响资源检查频率 |
| FreeMemoryInterval | 间隔触发一次主动内存回收(秒)0=关闭 |
| MaxMemory | 进程工作集上限(MB),超限自动重启 |
| MaxThread | 线程数上限,超限自动重启 |
| MaxHandle | 句柄数上限,超限自动重启(Windows) |
| AutoRestart | 定时重启间隔(分钟)0=关闭 |
| RestartTimeRange | 允许执行定时重启的时间段,例如 02:00-05:00(避免高峰重启) |
| WatchDog | 逗号/分号分隔的需要守护的其它系统服务名列表 |
| AfterStart | 服务启动后要额外拉起的命令或进程(如外部脚本/子进程) |
示例(伪 JSON 仅说明,实际以项目配置格式存储):
{
"ServiceName": "DemoAgent",
"DisplayName": "演示服务",
"WatchInterval": 5,
"MaxMemory": 1024,
"MaxThread": 500,
"MaxHandle": 20000,
"AutoRestart": 720,
"RestartTimeRange": "02:00-05:00",
"WatchDog": "Redis,nginx",
"AfterStart": "dotnet SomeWorker.dll"
}
周期任务 DoCheck 按顺序执行:
一旦任一检查触发重启,后续检查当次跳过。重启通过底层 Host.Restart(ServiceName) 调用平台服务管理器完成,提升稳定性(避免内部状态损坏时继续运行)。
内存回收:按 FreeMemoryInterval 主动执行一次 GC + LOH Compact,并在 Windows 下调用 EmptyWorkingSet 释放工作集。
配置 WatchDog = "ServiceA,ServiceB" 后:
适用于:主服务代理统一守护 Nginx / Redis / 业务自建服务 等关键进程。
-autorun / UseAutorun=true):写入登录启动项,适合需要访问交互式桌面或简化权限的本地开发/桌面场景Init() 中按顺序选择:
WindowsAutorun (当 UseAutorun) 否则 WindowsServiceOSXLaunchSystemd → Procd → RcInit(若均不可用则 DefaultHost)这样在不同发行版仍保持统一命令与运维体验。
下面列出各平台对应的守护实现及其行为特征,便于按需选择或排障:
WindowsService(Windows 服务)
StartServiceCtrlDispatcher/RegisterServiceCtrlHandlerEx 等 API。sc/net start|stop。适合服务器长期托管。WindowsAutorun(Windows 登录自启动)
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,随登录自动启动。.pid 文件跟踪进程并实现停止;更适合桌面/开发环境或需要交互桌面的场景。Systemd(Linux systemd)
<ServiceName>.service 单元文件到常见目录(优先于 /etc/systemd/system 等),并执行 daemon-reload/enable。WorkingDirectory、ExecStart、User/Group 等;启动/停止/重启通过 systemctl 执行。RcInit(Linux SysV init 兼容)
ServiceName.sh 控制脚本(当前应用目录),并在 /etc/rc*.d/ 或 /etc/rc.d/ 创建 S50/K50 级别的软链接。sh ServiceName.sh start|stop|restart 方式管理;用 .pid 文件跟踪进程。Procd(OpenWrt 专用)
procd 判定环境;生成 ServiceName.sh 并在 /etc/rc.d/ 创建 S50 链接。nohup 启动,.pid 文件跟踪,kill 停止;贴合 OpenWrt 生态的守护方式。OSXLaunch(macOS launchd)
~/Library/LaunchAgents/ 写入 ServiceName.plist,设定 ProgramArguments 与 RunAtLoad,通过 launchctl 管理。DefaultHost(默认主机)
Run/Stop 循环;通常只有在无法检测到任何平台守护体系时才会落到此实现。WatchDog 在
Systemd主机中守护其它服务时,会智能探测被守护服务实际托管方式(Systemd/SysV),避免“已安装但未检测到”的误判。
| 项目 | 角色定位 | 是否需包装外部程序 | 代码内可扩展 | 健康监控 | 看门狗 | 多实例配置 |
|---|---|---|---|---|---|---|
| NewLife.Agent | 框架+运行 | 否(直接引用库) | 是(命令/逻辑可扩展) | 内置(内存/线程/句柄/定时) | 是 | 是 |
| NSSM / srvany | 外部包装工具 | 是 | 否 | 否 | 否 | 需额外脚本 |
-run 在当前控制台内直接执行业务逻辑。XTrace.Log。一个服务代理示例跑起来的样子
这是Agent的标准控制台(Windows和Centos)。上面是该服务的状态信息,下面是控制菜单。
示例分析:
net start XAgent/net stop XAgent,Linux是systemctl start StarAgent/systemctl stop StarAgent。MyServices8+.cs、Program8+.cs是net8+的demo,暂时是注释的,有需要可以参考
!!!注意,服务安装、卸载、启动、停止,在Windows/Linux上需要管理员权限运行
服务应用在Windows上以本地用户权限运行,有最高权限;
服务应用在Linux上以root权限运行,有最高权限;
该设计尽管带来了一定安全风险,但能够避免绝大部分初级用户的简单问题,优先易用性。
使用NewLife组件的最简便方式是从Nuget引用,例如在项目Nuget管理中搜索NewLife.Agent 并引入。
NewLife组件由社区共创20多年,使用MIT开源协议,任何人可任意修改并再次发行(无需声明来源)!许多企业基于此构建内部开发框架时,甚至可通过批量替换源码中所有NewLife字符串为贵公司名实现私有化定制。
团队始终秉承开放态度,不仅支持VisualStudio(最新正式版)打开解决方案编译,也兼容dotnet build命令行编译,项目文件摒弃复杂功能以追求简单易用,真正做到开箱即用。
我们公开强命名证书newlife.snk以支持独自编译替换程序集。
命令行中运行以下命令快速体验NewLife组件:
dotnet new install NewLife.Templates
dotnet new service --name agent
cd agent
dotnet run
各项目默认支持net9.0/netstandard2.1/netstandard2.0/net4.62/net4.5,旧版(2024.0801)支持net4.0/net2.0
| 项目 | 年份 | 说明 |
|---|---|---|
| 基础组件 | 支撑其它中间件以及产品项目 | |
| NewLife.Core | 2002 | 核心库,日志、配置、缓存、网络、序列化、APM性能追踪 |
| NewLife.XCode | 2005 | 大数据中间件,单表百亿级,MySql/SQLite/SqlServer/Oracle/PostgreSql/达梦,自动分表,读写分离 |
| NewLife.Net | 2005 | 网络库,单机千万级吞吐率(2266万tps),单机百万级连接(400万Tcp长连接) |
| NewLife.Remoting | 2011 | 协议通信库,提供CS应用通信框架,支持Http/RPC通信框架,高吞吐,物联网设备低开销易接入 |
| NewLife.Cube | 2010 | 魔方快速开发平台,集成了用户权限、SSO登录、OAuth服务端等,单表100亿级项目验证 |
| NewLife.Agent | 2008 | 服务管理组件,把应用安装成为操作系统守护进程,Windows服务、Linux的Systemd |
| NewLife.Zero | 2020 | Zero零代脚手架,基于NewLife组件生态的项目模板NewLife.Templates,Web、WebApi、Service |
| 中间件 | 对接知名中间件平台 | |
| NewLife.Redis | 2017 | Redis客户端,微秒级延迟,百万级吞吐,丰富的消息队列,百亿级数据量项目验证 |
| NewLife.RocketMQ | 2018 | RocketMQ纯托管客户端,支持Apache RocketMQ和阿里云消息队列,十亿级项目验 |
| NewLife.MQTT | 2019 | 物联网消息协议,MqttClient/MqttServer,客户端支持阿里云物联网 |
| NewLife.IoT | 2022 | IoT标准库,定义物联网领域的各种通信协议标准规范 |
| NewLife.Modbus | 2022 | ModbusTcp/ModbusRTU/ModbusASCII,基于IoT标准库实现,支持ZeroIoT平台和IoTEdge网关 |
| NewLife.Siemens | 2022 | 西门子PLC协议,基于IoT标准库实现,支持IoT平台和IoTEdge |
| NewLife.Map | 2022 | 地图组件库,封装百度地图、高德地图、腾讯地图、天地图 |
| NewLife.Audio | 2023 | 音频编解码库,PCM/ADPCMA/G711A/G722U/WAV/AAC |
| 产品平台 | 产品平台级,编译部署即用,个性化自定义 | |
| Stardust | 2018 | 星尘,分布式服务平台,节点管理、APM监控中心、配置中心、注册中心、发布中心 |
| AntJob | 2019 | 蚂蚁调度,分布式大数据计算平台(实时/离线),蚂蚁搬家分片思想,万亿级数据量项目验证 |
| NewLife.ERP | 2021 | 企业ERP,产品管理、客户管理、销售管理、供应商管理 |
| CrazyCoder | 2006 | 码神工具,众多开发者工具,网络、串口、加解密、正则表达式、Modbus、MQTT |
| EasyIO | 2023 | 简易文件存储,支持分布式系统中文件集中存储。 |
| XProxy | 2005 | 产品级反向代理,NAT代理、Http代理 |
| HttpMeter | 2022 | Http压力测试工具 |
| GitCandy | 2015 | Git源代码管理系统 |
| SmartOS | 2014 | 嵌入式操作系统,完全独立自主,支持ARM Cortex-M芯片架构 |
| SmartA2 | 2019 | 嵌入式工业计算机,物联网边缘网关,高性能.NET8主机,应用于工业、农业、交通、医疗 |
| FIoT物联网平台 | 2020 | 物联网整体解决方案,建筑、环保、农业,软硬件及大数据分析一体化,单机十万级点位项目验证 |
| UWB高精度室内定位 | 2020 | 厘米级(10~20cm)高精度室内定位,软硬件一体化,与其它系统联动,大型展厅项目验证 |
新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的80多个开源项目已被广泛应用于各行业,Nuget累计下载量高达400余万次。
团队开发的大数据中间件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台FIoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。
我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IoT服务供应商。
新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录
网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号:
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 is compatible. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 is compatible. |
| .NET Framework | net40 net40 is compatible. net403 net403 was computed. net45 net45 is compatible. net451 net451 was computed. net452 net452 was computed. net46 net46 was computed. net461 net461 is compatible. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 2 NuGet packages that depend on NewLife.Agent:
| Package | Downloads |
|---|---|
|
NewLife.Extensions.Hosting.AgentService
为ASP.NET Core与Worker提供Agent托管集成,支持服务化部署与运维。 |
|
|
sljc_WebApi.Core
用于后台API服务包 |
Showing the top 3 popular GitHub repositories that depend on NewLife.Agent:
| Repository | Stars |
|---|---|
|
NewLifeX/Stardust
星尘,轻量级分布式服务框架。配置中心、集群管理、远程自动发布、服务治理。服务自动注册和发现,负载均衡,动态伸缩,故障转移,性能监控。
|
|
|
NewLifeX/NewLife.Net
单机吞吐2266万tps的网络通信框架
|
|
|
NewLifeX/XProxy
XProxy是一个代理服务器,内置有NAT、反向代理、直接代理、间接代理等。
|
| Version | Downloads | Last Updated |
|---|---|---|
| 10.15.2026.402 | 246 | 4/2/2026 |
| 10.15.2026.402-beta0903 | 136 | 4/2/2026 |
| 10.15.2026.313-beta1445 | 160 | 3/13/2026 |
| 10.15.2026.305-beta0001 | 148 | 3/5/2026 |
| 10.15.2026.201 | 343 | 2/1/2026 |
| 10.15.2026.201-beta0225 | 156 | 2/1/2026 |
| 10.14.2026.112-beta0712 | 198 | 1/12/2026 |
| 10.14.2026.102 | 244 | 1/2/2026 |
| 10.14.2026.102-beta1552 | 166 | 1/2/2026 |
| 10.14.2025.1113 | 454 | 11/13/2025 |
| 10.14.2025.1113-beta0106 | 360 | 11/13/2025 |
| 10.13.2025.1001 | 508 | 10/1/2025 |
| 10.13.2025.1001-beta1728 | 253 | 10/1/2025 |
| 10.13.2025.901 | 519 | 9/1/2025 |
| 10.13.2025.901-beta0240 | 263 | 9/1/2025 |
| 10.13.2025.824-beta1223 | 312 | 8/24/2025 |
| 10.13.2025.604 | 736 | 6/4/2025 |
| 10.13.2025.602-beta1643 | 275 | 6/2/2025 |
| 10.12.2025.401 | 857 | 4/1/2025 |
| 10.12.2025.401-beta0712 | 300 | 4/1/2025 |
增强Windows服务稳定性