如何跟踪远程文件?
我正在尝试找到一种在远程主机上跟踪文件的好方法。 这是在 Linux 机器的内部网络上。 要求是:
必须表现良好(没有额外的进程,或持续输出)
不能需要某人的宠物 Perl 模块.
可以通过 Perl 调用。
如果可能,不需要在远程计算机上自定义构建的脚本或实用程序(常规 Linux 实用程序就可以)
我尝试过的解决方案通常是这种
ssh remotemachine -f <some command>
“某些命令”:
tail -f logfile
基本 tail 不起作用,因为在本地 ssh 进程终止后,远程进程继续将输出写入终端。
$socket = IO:Socket::INET->new(...);
$pid = fork();
if(!$pid)
{
exec("ssh $host -f '<script which connects to socket and writes>'");
exit;
}
$client = $socket->accept;
while(<$client>)
{
print $_;
}
这效果更好,因为本地进程退出后屏幕上没有输出,但远程进程没有发现它的套接字已关闭并且它会无限期地存在。
I am trying to find a good way to tail a file on a remote host. This is on an internal network of Linux machines. The requirements are:
Must be well behaved (no extra process laying around, or continuing output)
Cannot require someone's pet Perl module.
Can be invoked through Perl.
If possible, doesn't require a custom built script or utility on the remote machine (regular linux utilities are fine)
The solutions I have tried are generally of this sort
ssh remotemachine -f <some command>
"some command" has been:
tail -f logfile
Basic tail doesn't work because the remote process continues to write output to the terminal after the local ssh process dies.
$socket = IO:Socket::INET->new(...);
$pid = fork();
if(!$pid)
{
exec("ssh $host -f '<script which connects to socket and writes>'");
exit;
}
$client = $socket->accept;
while(<$client>)
{
print $_;
}
This works better because there is no output to the screen after the local process exits but the remote process doesn't figure out that its socket is down and it lives on indefinitely.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
netcat 应该为你做这件事。
netcat should do it for you.
您可以使用 bash 和 rsync 远程尾随文件。 以下脚本取自本教程: 使用 bash 远程尾部文件同步
You can Tail files remotely using bash and rsync. The following script is taken from this tutorial: Tail files remotely using bash and rsync
rsync://[USER@]HOST[:PORT]/SRC...[DEST] | rsync://[USER@]HOST[:PORT]/SRC...[DEST] | 尾巴[目的地]?
rsync://[USER@]HOST[:PORT]/SRC... [DEST] | tail [DEST] ?
有人建议使用 nc (netcat)。 该解决方案确实有效,但不如仅使用 ssh -t 理想。 最大的问题是,您必须在连接的两端都使用 nc,并且需要在本地计算机上进行一些端口发现,以找到合适的端口进行连接。 以下是对上述代码的修改以使用 netcat:
Someone suggested using nc (netcat). This solution does work but is less ideal than just using ssh -t. The biggest problem is that you have to use nc on both sides of the connection and need to do some port discovery on the local machine to find a suitable port over which to connect. Here is the adaptation of the above code to use netcat:
有File::Tail。 不知道有帮助吗?
There is File::Tail. Don't know if it helps?
您是否尝试过
ssh 手册页中的 -t 选项:
而不是
Have you tried
-t option from the ssh man page:
instead of
一些想法:
tail -f
结合使用。Some ideas:
tail -f
.您可以尝试 Survlog 仅限 OS X。
You could try Survlog Its OS X only though.