远程服务器执行脚本时,如何阻止nohup输出显示在SSH服务器
解决远程SSH执行脚本时nohup输出泄露到本地终端的问题
我来帮你搞定这个头疼的问题!这种情况通常是因为远程脚本里的后台进程没有彻底和SSH会话的输出流切断关联,导致本该留在远程服务器的输出“跑”到了你的本地终端。下面给你一步步的解决方案:
先排查脚本内的nohup写法
首先检查你脚本里的nohup命令是不是没做完整的输出重定向。正常情况下,要让nohup的输出完全留在远程服务器,写法应该是这样的:
nohup /path/to/your/command > /var/log/your_script.log 2>&1 &
这里的> /var/log/your_script.log是把标准输出写到指定日志文件,2>&1是把标准错误也重定向到同一个文件,最后的&是让进程后台运行。如果你的脚本里只写了nohup command &,那输出还是会继承SSH会话的标准输出,自然就跑到你本地终端了。
如果不想保存输出,也可以直接丢去/dev/null:
nohup /path/to/your/command > /dev/null 2>&1 &
远程执行时的额外处理
如果不想修改脚本,或者修改后还是有问题,你可以在远程执行脚本的命令里直接把整个脚本的输出都重定向:
ssh user@remote_host "bash /path/to/your/script.sh > /dev/null 2>&1"
不过这种方式会把脚本本身的所有输出都丢弃,如果你还需要看脚本的正常日志,还是优先修改脚本内的nohup写法更稳妥。
进阶:用disown彻底脱离会话
有时候即使加了重定向,进程还是可能和当前会话有关联,这时候可以在nohup之后加上disown命令,让进程彻底脱离当前SSH会话:
nohup /path/to/your/command > /var/log/your_script.log 2>&1 & disown
这样进程就完全属于远程服务器的后台,不会再把任何输出发送到你的本地终端了。
内容的提问来源于stack exchange,提问作者user2373210
相关产品推荐
相关产品推荐

