You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下.NET Core站点重部署后未加载新DLL如何解决?

解决方案

.NET Core 运行时启动后会将加载的DLL文件锁定在内存中,仅替换磁盘上的DLL不会触发运行时重新加载新二进制文件,必须重启对应的systemd服务才会生效,按照以下步骤配置即可实现部署后自动更新:

步骤1:配置部署账号sudo免密执行重启命令

你用于GitHub Action SSH登录服务器的部署账号,默认执行sudo命令需要输入密码,会导致自动化流程卡住,需要提前配置免密权限:

  • 登录Ubuntu服务器,执行sudo visudo打开sudo配置文件
  • 在文件末尾添加如下规则,将deploy_user替换为你实际使用的部署账号用户名:
    deploy_user ALL=(ALL) NOPASSWD: /bin/systemctl restart myapp.service
    
  • 保存退出配置文件后,切换到部署账号执行sudo systemctl restart myapp.service,确认无需输入密码即可执行成功即配置完成。

步骤2:在GitHub Action流程中添加重启步骤

在你现有的自动部署流程的文件上传完成的步骤之后,新增SSH执行重启命令的步骤即可,参考配置如下:

- name: 重启.NET应用服务
  uses: appleboy/ssh-action@v0.1.10
  with:
    host: ${{ secrets.SERVER_HOST }}
    username: ${{ secrets.SERVER_USER }}
    key: ${{ secrets.SERVER_SSH_KEY }}
    port: ${{ secrets.SERVER_PORT }}
    script: sudo systemctl restart myapp.service

注意:上述配置中的服务器地址、账号、SSH密钥等敏感参数需要提前存储在GitHub仓库的Secrets中,禁止硬编码在Action配置文件里

可选优化:配置零停机重启

如果不希望重启服务时站点出现短暂不可用,可以修改systemd服务配置降低中断时长:

  • 执行sudo nano /etc/systemd/system/myapp.service编辑服务文件
  • 在[Service]配置块下新增如下参数:
    Restart=always
    RestartSec=1
    
  • 执行sudo systemctl daemon-reload让配置生效。

注意事项

  • 必须确保所有发布文件全部上传完成后再执行重启操作,否则可能出现服务启动失败的问题
  • 如果本地开发的配置文件和服务器线上配置不同,可以在Action上传步骤中排除appsettings.json等配置文件,避免覆盖线上配置

内容的提问来源于stack exchange,提问作者raklos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:54:05