如何在本地运行命令或可能在远程机器上

时间:2014-06-27 06:22:43

标签: perl

我有一个安装HOSTA,其中安装了所有软件应用程序组件。我编写了一个脚本,如果从同一主机(HOSTA)运行它就能完美运行。我正在做的操作类似于截断文件,读取来自文件等的模式,但在其他情况下,所有组件可能不安装在同一主机中。可能是组件A在HOSTA上,组件b和c在HOSTB上。如何编写脚本来处理这种情况?

我正在执行操作的一些代码。如果我提供truncateLogfile(/ path / to / file),那么它应该截断,无论它是在本地计算机还是远程计算机上。

sub truncateLogfile {
    my $pathFile = shift;
    if (! -e $pathFile ){ warn "The [$pathFile] does not exist\n" } ;
    system("truncate $pathFile --size 0")  == 0  or warn "Failed "; 
}


sub folderClean {
    my $self = shift;
    my $pathFolder = shift;
    opendir (DIR,$pathFolder) or warn "[!] Failed to open the Dir $!"; 
    my @files = map { $pathFolder . '/' . $_ }
                grep { !/^\.{1,2}$/ }
                readdir (DIR);
    closedir (DIR); 
    print "\nNo files present in $pathFolder\n" if !@files;
    foreach my $file (@files) {
        print "Removing $file...\n";
        unlink "$file"; 
    } 
}

1 个答案:

答案 0 :(得分:0)

如果我对您的问题的理解是正确的,则要求是从一个主机运行您的脚本,但希望在多个主机上执行文件操作,而不知道该文件夹/文件可用的主机。有很多方法可以处理。

一个简单的方法就是拥有你的系统"在for循环中执行命令,每次迭代都应该进入相应的主机。伪代码如下所示。

my @hosts = (hostA, hostB, hostC, hostD); # Assume that you have these four hosts.
foreach (@hosts) {
   system("ssh $_ truncate $pathFile --size 0")  == 0 or warn "Failed "; 
}

上面的代码将让您的程序遍历所有主机并执行所需的操作。我使用过' ssh'在这个例子中提到一个安全的shell登录。根据典型的登录方法,您可以使用sqsh,rsh等代替ssh。

即使多个主机中有相同的文件,上述方法仍然有效。我希望你的要求没问题。

相关问题