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

Linux下.NET应用后台自升级疑问:父进程退出后脚本能否持续运行

.NET应用Linux自升级:脚本独立运行的解决方案

核心问题解答

  • 直接启动脚本,父进程退出时脚本会被终止:默认情况下,子进程与父进程同属一个会话组,当你的.NET应用(父进程)被终止退出时,会话首进程退出会导致子进程收到SIGHUP信号,绝大多数脚本/进程收到该信号会直接终止,无法完成后续升级操作。
  • 必须将脚本脱离父进程控制:简单的command &后台启动并不靠谱,因为进程仍在原会话组内,依然会收到SIGHUP;推荐使用systemd-run将脚本作为独立的systemd临时服务运行,彻底脱离父进程的会话关联,不受父进程退出影响。

推荐实现方式

使用systemd-run启动升级脚本,修改后的C#代码示例:

var psi = new ProcessStartInfo
{
    FileName = "/usr/bin/systemd-run",
    Arguments = "--unit=app-upgrade -- /usr/local/bin/upgrade-app.sh",
    CreateNoWindow = true,
    UseShellExecute = false // 避免启动shell,直接执行systemd-run
};
var process = Process.Start(psi);
// 无需等待,直接退出当前应用即可

额外注意事项

  • 确保升级脚本有可执行权限:执行chmod +x /usr/local/bin/upgrade-app.sh
  • 脚本内要处理好服务启停逻辑:比如先通过systemctl stop your-app.service停止当前应用,再执行安装、重启操作
  • 可通过systemctl status app-upgrade查看升级任务状态,journalctl -u app-upgrade查看升级日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:50:54