2016-06-23 29 views
1

我基本上是想编写一个脚本来从本地(服务器)捕获实时日志和实时远程服务器(服务器2)停止在本地服务器和远程SSH服务器“尾-f”。 日志文件存储在两台服务器上的相同目录中。启动和使用bash

为〔实施例:/var/log/test/test.log

现在我想写在server1的剧本和拍摄日志,增加的两个节点。外壳(不是真正的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小白,希望有人能帮助我实现目标。 谢谢

回答

0

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

或者,你可以捕捉的$!其中包含了最近运行的后台进程的PID值。您可以使用这些值kill让父脚本结束它们。要确保你的父母脚本终止他们的出口,就需要建立一个退出trap

+0

如何可以杀死在本地尾-f命令的同时在远程服务器的PID? 和退出信号应在两个尾部命令中捕获。 – Feng

+0

你应该不需要。在你的示例代码中,它是'ssh',它在本地服务器的后台运行,而不是远程服务器上的'tail'。通过杀死本地'ssh',它将通过发送SIGHUP来终止它运行的远程命令。 –