从本地计算机执行Perl脚本在远程服务器上

4
我是一个新手Perl程序员,需要将一些bash脚本翻译成Perl,以便从多台远程生产服务器的Apache日志中提取更有用的信息,并在本地计算机上进行处理。我需要尽可能地保持生产服务器的清洁。因此,在我的本地计算机上有两个单独的.pl文件:crawler.pl(原名为crawler.sh),负责从生产服务器获取有用的信息;reporter.pl(原名为reporter.sh)负责运行crawler并汇总从生产服务器检索的信息。
我想实现的目标是Perl的等效操作:
    ssh "user@host" 'bash -s' < $crawler

其中 $crawler 是(曾经)本地计算机上 crawler.sh 的物理位置。

我希望 reporter.pl 打开一个 ssh 连接到生产服务器并远程执行 crawler.pl。大致如下:

    use Net::SSH qw(ssh);
    ssh($loginString,"perl -e $crawler");

显然这不可行,但希望你明白我的意思。

我知道可以通过将爬虫文件复制到生产服务器并在完成任务后删除它来实现此目的。但如果有更优雅的解决方案我会更加期待。

2个回答

4

如果您没有向脚本传递参数,那么简单的方法如下:

ssh "user@host" perl < $crawler

如果您想要传递命令行参数,请使用“-”占位符,以获得与bash -s相同的效果,即:

ssh "user@host" 'perl - arg1 arg2' < $crawler


1
这个可以完美工作,但我希望避免调用system(),有可能吗? - Tsamaunk
如果您想完全避免使用system(),那么CPAN模块Net::SSH::Perl似乎有一个纯Perl SSH客户端可以实现。如果您只是想将系统调用封装在一个模块中,那么您可以继续使用Net::SSH。您只需要像上面那样调用perl,并将脚本内容传递给其标准输入即可。在Net::SSH中,sshopen2似乎可以起到作用;您可以逐行打开脚本并将其写入WRITER中。 - Steve Sanbeg

3

在这种情况下,Perl 是在远程主机还是本地计算机上查找 $crawler - Tsamaunk
@Tsamaunk 一切都是远程的,顺便说一下,-e $crawler 表示在命令行上运行 Perl 脚本。 - mpapec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接