小编dee*_*cks的帖子

通过 ssh 在多台机器上的尾部日志文件

我正在尝试tail在多台远程机器上创建一个日志文件并将输出转发到我的本地工作站。我希望在按下Ctrl-时关闭连接C

目前我有以下功能,几乎可以按预期工作。

function dogfight_tail() {
 logfile=/var/log/server.log
 pids=""
 for box in 02 03; do
   ssh server-$box tail -f $logfile | grep $1 &
   pids="$pids $!"
 done
 trap 'kill -9 $pids' SIGINT
 trap  wait
}
Run Code Online (Sandbox Code Playgroud)

连接关闭,我从tail. 但是,由于输出是成批出现的,因此存在某种缓冲。

这是有趣的部分……

我可以在执行以下操作时看到相同的缓冲行为,并将“测试”附加到/var/log/server.log远程机器上的文件4-5 次……

ssh server-01 "tail -f /var/log/server.log | grep test"
Run Code Online (Sandbox Code Playgroud)

......并找到了两种禁用它的方法......

  1. 将 -t 标志添加到 ssh。

    ssh -t server-01 "tail -f /var/log/server.log | grep test"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从远程命令中删除引号。

    ssh server-01 tail -f /var/log/server.log | grep …
    Run Code Online (Sandbox Code Playgroud)

linux ssh tail

42
推荐指数
1
解决办法
4万
查看次数

在多个远程主机上清除 ssh 命令的陷阱

我想使用 ssh 在多个远程主机上执行任意命令。这些命令大多是长时间运行的命令,用于监视服务器资源并将输出聚合到我的本地工作站(如tail -f,mpstattcpdump/ tcpflowwithgrep等)。

问题是我还没有找到一种方法来保持命令运行,同时可靠地终止所有主机的 SSH 连接和远程命令。

我尝试了许多ssh标志变化,等待,猫,读取,陷阱等......两者都被立即杀死,本地终端卡住或远程命令在 ssh 连接被终止后继续在远程主机上运行。

这就是我目前所拥有的。

function server_ssh() {
  pids=""
  for box in 01 02 03; do
    ssh -t -t -f server$box "$1" &
    pids="$pids $!"
  done
  trap 'kill -9 $pids' SIGINT
  # wait, cat, read ??
}
Run Code Online (Sandbox Code Playgroud)

linux ssh trap

6
推荐指数
1
解决办法
845
查看次数

标签 统计

linux ×2

ssh ×2

tail ×1

trap ×1