pm2重载后Asp.Net Core项目启动失败,版本字符串无效
问题解决:PM2 Reload ASP.NET Core 进程时 NuGet 版本错误及替代方案
一、PM2 Reload 报错的原因及修复
你遇到的'N/A' is not a valid version string错误,核心原因是**dotnet watch run是开发环境的热重载工具,和PM2的Reload机制不兼容**:
dotnet watch本身会监听文件变更并自动重启进程,属于开发场景工具,不适合生产环境部署。- PM2的
reload是平滑重载(发送信号让进程优雅重启),但dotnet watch无法正确处理这个信号,导致进程重启时NuGet读取版本信息异常,抛出无效版本字符串错误。
修复方案:改用生产环境发布包启动
发布ASP.NET Core项目:
dotnet publish -c Release -o ./publish该命令会在项目目录下生成
publish文件夹,包含编译后的生产环境运行文件。用PM2启动发布后的DLL:
pm2 start --name "dotnet-api" "dotnet ./publish/Factor Earth Forms 2 dotnet api.dll"此时执行
pm2 reload dotnet-api即可正常平滑重载,不会触发NuGet版本错误。
临时替代(开发环境):用PM2 Restart代替Reload
如果必须在开发环境使用dotnet watch run,不要用pm2 reload,改用pm2 restart <进程ID/名称>,该命令会完全重启进程,和重新执行pm2 start效果一致,避免重载冲突。
二、替代PM2的进程管理工具推荐
如果不想继续使用PM2,以下两种工具更适合生产环境部署ASP.NET Core服务:
1. Systemd(Ubuntu自带,推荐)
Ubuntu默认自带的服务管理工具,支持开机自启、崩溃自动重启,配置简单:
- 创建服务配置文件:
sudo nano /etc/systemd/system/dotnet-api.service - 写入以下配置(根据实际路径修改):
[Unit] Description=Factor Earth Forms API After=network.target [Service] User=ubuntu WorkingDirectory=/home/ubuntu/record-dotnet/publish ExecStart=/usr/bin/dotnet /home/ubuntu/record-dotnet/publish/Factor Earth Forms 2 dotnet api.dll Restart=always RestartSec=10 Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target - 启用并启动服务:
sudo systemctl enable dotnet-api.service sudo systemctl start dotnet-api.service - 常用命令:
# 查看状态 sudo systemctl status dotnet-api.service # 重启服务 sudo systemctl restart dotnet-api.service # 查看日志 journalctl -u dotnet-api.service -f
2. Supervisor
轻量级进程管理工具,配置直观,适合快速部署:
- 安装Supervisor:
sudo apt update && sudo apt install supervisor - 创建配置文件:
sudo nano /etc/supervisor/conf.d/dotnet-api.conf - 写入以下配置:
[program:dotnet-api] command=dotnet /home/ubuntu/record-dotnet/publish/Factor Earth Forms 2 dotnet api.dll directory=/home/ubuntu/record-dotnet/publish user=ubuntu autostart=true autorestart=true stderr_logfile=/var/log/dotnet-api.err.log stdout_logfile=/var/log/dotnet-api.out.log - 加载配置并启动服务:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start dotnet-api - 常用命令:
# 查看状态 sudo supervisorctl status dotnet-api # 重启服务 sudo supervisorctl restart dotnet-api # 查看日志 tail -f /var/log/dotnet-api.out.log
内容的提问来源于stack exchange,提问作者Eric Webb
相关产品推荐
相关产品推荐

