【问题标题】:start and stop "tail -f" in local server and remote ssh server using bash使用 bash 在本地服务器和远程 ssh 服务器中启动和停止“tail -f”
【发布时间】:2016-06-23 20:34:49
【问题描述】:

我基本上是在尝试编写一个脚本来实时捕获本地(server1)和远程服务器(server2)的实时日志。 日志文件存储在两台服务器上的同一目录中。

例如:/var/log/test/test.log

现在我想在 server1 中编写一个脚本并在两个节点中捕获不断增加的日志。

shell 的基本逻辑(不是真正的 bash 代码):

tail -f /var/log/test/test.log > /some/local/dir/sever1.log &
ssh server2 and tail -f /var/log/test/test.log > /some/local/dir/server2.log &
if [ exit or ctrl+c ] 
kill "tail -f pid" in server1
kill "tail -f pid" in server2.
exit

我是一个 bash 菜鸟,希望有人能帮助我实现目标。 谢谢

【问题讨论】:

    标签: linux bash shell ssh tail


    【解决方案1】:

    只要您的脚本没有nohup'd or disown'd,终止父脚本也应该终止其子进程。

    或者,您可以捕获 $! 的值,其中包含最近运行的后台进程的 PID。您可以将这些值与kill 一起使用,让父脚本结束它们。为确保您的父脚本在退出时终止它们,您需要设置一个退出 trap

    【讨论】:

    • 如何在本地 tail -f 命令的同时杀死远程服务器中的 PID?和退出信号应该在两个尾命令中都被捕获。
    • 您不需要这样做。在您的示例代码中,在本地服务器的后台运行的是 ssh,而不是远程服务器上的 tail。通过杀死本地ssh,它将通过发送 SIGHUP 来终止它正在运行的远程命令。
    最近更新 更多