我正在尝试找到一种好的方式来追踪远程主机上的文件。这是在Linux机器的内部网络中进行的。要求如下:
必须表现良好(没有额外的进程残留或继续输出)
不能依赖于某个人的Perl模块。
可以通过Perl调用。
如果可能的话,不需要在远程机器上构建自定义脚本或实用程序(常规Linux实用程序就可以)。
我尝试过的解决方案通常是这种类型的:
ssh remotemachine -f <some command>
"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 $_;
}
这种方法更好,因为本地进程退出后不会在屏幕上输出任何内容,但远程进程并没有意识到它的套接字已经关闭,因此它会无限期地继续运行。