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

远程执行Bash脚本:终端显部分日志,其余重定向至本地日志文件

实现远程执行脚本时的日志分流:终端显示关键信息,其余存本地日志

嘿,这个需求其实很常见,咱们可以通过区分输出流+本地重定向的方式轻松搞定。我给你分步拆解:

核心思路

把脚本里需要保存到本地日志的内容,定向到标准错误流(stderr);需要在终端显示的内容留在标准输出流(stdout)。然后在本地发起远程执行时,把stderr重定向到本地日志文件,stdout直接输出到终端,完美实现分流。

具体操作步骤

1. 编写Host A上的脚本(比如命名为deploy_script.sh)

修改脚本,把要存日志的内容用>&2转到stderr:

# 这部分日志要存入Host A的本地文件,输出到stderr
echo "Executing the script on $(hostname) at $(date)" >&2

# 这部分要实时显示在Host A的终端,保留在stdout
echo -n "[Info] Importing docker images from tar f..."
# 后续如果有更多终端提示,直接用普通echo即可
echo "done!"

2. 在Host A上发起远程执行命令

用ssh把脚本传到Host B执行,同时把stderr重定向到本地日志文件:

ssh your_username@Host_B 'bash -s' < deploy_script.sh 2> /path/to/your/local/logs/execution.log

效果验证

执行命令后,Host A的终端会显示:

[Info] Importing docker images from tar f...done!

而execution.log文件里会记录:

Executing the script on Host_B at Wed Oct 11 14:30:00 UTC 2024

额外说明

  • 如果你的脚本已经在Host B上了,也可以直接远程调用,同样适用重定向:
    ssh your_username@Host_B "/path/to/Host_B/script.sh" 2> /path/to/local/logs/execution.log
    
  • 要是想同时把终端显示的内容也备份一份到日志,可以用tee配合:
    ssh your_username@Host_B 'bash -s' < deploy_script.sh 2> execution.log | tee -a execution.log
    
    这样终端显示的内容也会追加到日志里,适合需要完整记录的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:14:41