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

如何退出PuTTY时不终止正在运行的PowerShell进程

问题原因

退出PuTTY结束SSH会话时,系统会向会话关联的所有子进程发送SIGHUP挂断信号,默认会终止前台/后台运行的未脱离会话的进程,你的PowerShell进程就是被这个信号终止的。

解决方案

你可以根据使用场景选择以下任意一种方案:

方案1:临时后台运行(适合快速测试)

用nohup命令让进程忽略SIGHUP信号,后台运行即可,命令格式如下,替换成你自己的脚本路径和日志路径:

nohup pwsh /path/to/your/bot/script.ps1 > /path/to/logfile.log 2>&1 &

参数说明:

  • nohup:让进程忽略挂断信号
  • pwsh:Linux平台PowerShell的默认执行命令
  • > /path/to/logfile.log 2>&1:把脚本的标准输出和错误输出都写入指定日志文件,方便后续排查问题
  • 末尾的&:让进程直接在后台运行

执行完命令后输入exit正常退出SSH即可,不要直接关闭PuTTY窗口,避免部分环境下nohup不生效。

方案2:会话持久化工具(适合需要随时回到进程交互界面的场景)

可以用screen或者tmux这类终端复用工具保留会话,以tmux为例:

  • 先安装tmux:Debian/Ubuntu系执行apt install tmux,RHEL/CentOS系执行yum install tmux
  • 执行tmux new -s discord-bot创建一个名为discord-bot的独立会话
  • 在新开的会话里正常启动你的PowerShell机器人脚本
  • 按Ctrl+B之后再按D,即可脱离当前会话,此时进程会保持后台运行
  • 后续需要回到会话操作的话,执行tmux attach -t discord-bot即可恢复界面

即使退出PuTTY,tmux的会话也不会被终止,进程会持续运行。

方案3:系统服务注册(最稳定,适合生产环境长期运行)

直接把机器人注册成systemd服务,不仅可以保持后台运行,还支持开机自启、崩溃自动重启,操作步骤如下:

  1. 新建服务配置文件:vi /etc/systemd/system/discord-bot.service
  2. 写入以下配置,替换成你自己的实际路径和运行用户即可:
[Unit]
Description=Discord Bot PowerShell Service
After=network.target

[Service]
User=运行机器人的普通用户名(不建议用root)
WorkingDirectory=/path/to/your/bot/脚本所在目录
ExecStart=/usr/bin/pwsh /path/to/your/bot/script.ps1
Restart=always
RestartSec=5
# 部分环境PowerShell运行需要以下环境变量,无异常可以删掉
Environment=DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

[Install]
WantedBy=multi-user.target
  1. 重载systemd配置:systemctl daemon-reload
  2. 启动服务:systemctl start discord-bot
  3. 设置开机自启:systemctl enable discord-bot

后续要查看运行日志的话,执行journalctl -u discord-bot -f即可实时查看脚本输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:10