【发布时间】:2010-10-08 15:26:09
【问题描述】:
我正在尝试找到一种在远程主机上跟踪文件的好方法。这是在 Linux 机器的内部网络上。要求是:
必须表现良好(没有额外的进程放置,或继续输出)
不能要求某人的宠物 Perl 模块。
可以通过 Perl 调用。
如果可能,不需要在远程机器上自定义构建脚本或实用程序(常规的 linux 实用程序就可以)
我尝试过的解决方案一般都是这样的
ssh remotemachine -f <some command>
“一些命令”是:
tail -f logfile
Basic 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 $_;
}
这效果更好,因为在本地进程退出后没有输出到屏幕,但远程进程没有发现它的套接字已关闭并且它无限期地存在。
【问题讨论】:
-
您发布的代码示例完全没有意义。能发一下实物吗?
-
“远程进程继续喷”是什么意思?当 ssh 连接的任何一方死亡时,另一方也应该死亡...... 困惑
-
是的 - 我已经看到 ssh 会话死了,并且通过它们运行的任何东西也会发出嘶嘶声,除非它们在分离的屏幕会话或其他东西中运行
-
@Aaron:从 shell 尝试:ssh host -f "tail -f
" 然后按 Ctrl-C。在我的 RedHat 机器上,我继续在终端中获取文件的尾部,远程 SSH+tail 仍然非常活跃。使用 -t 而不是 -f 可以解决此问题。
标签: perl scripting ssh tail netcat