在Linux服务器

时间:2016-03-04 14:32:53

标签: linux perl

我正在Linux服务器中为自动化脚本执行perl文件。如果你可以提供帮助,那将是非常有帮助的。

我当前的服务器是双节点群集服务器,我使用的是perl自动化脚本。我不想将我的perl文件复制到两个节点,所以我想使用“ssh”命令远程执行命令到第二个节点。我的节点1服务器是abd01,我的节点2服务器是abd02。我已登录abd01并为abd02运行远程命令。以下是我的命令:

ssh -q abd02 "ls -lh \$(find \-L \/opt\/emageon\/backup\/\${UNIQUE_CUSTOMER}*/\$(date '+%Y%m%d') -type f)|grep sfdisk___sr0 | awk 'END {print NR}'"

我得到的输出值为“8”。

我在perl文件中使用相同的命令以及转义字符,当我使用命令“perl icount.pl”运行perl文件时,我没有得到所需的输出。下面是我正在使用的icount.pl文件的perl脚本

#!/usr/bin/perl
use strict;
use warnings;
use Config;
use Socket;
use POSIX qw(strftime);
use IO::Socket::INET;


my $icount;
$icount = `ssh -q root\@rcs02 \"ls -lh \$(find -L /opt/emageon/backup/\${UNIQUE_CUSTOMER}*/\$(date \'+%Y%m%d\') -type f)|grep sfdisk___sr0 | awk 'END {print NR}'"`;

print "Value is $icount /n";

我得到的输出如下所述;

Value is -rw-r----- 1 druser druser 3.1M Mar  4 01:59 /opt/emageon/backup/0050569143c5/20160304/drbackup/info/drosbackup.sh.log
0

对于大多数文件,我收到的消息如下所示

bash:第126行:/opt/emageon/backup/005056916d4d/20160304/scbackup/DARC/201603040416/controlfile.txt:权限被拒绝

当我在perl文件中运行相同的命令时,我真的不确定为什么我没有得到8的输出。请帮我解决这个问题,因为我遇到了自动化脚本

1 个答案:

答案 0 :(得分:0)

尝试使用qx{}代替反引号运算符。 特别是您可以使用qx' ...'。 使用单引号作为分隔符可以保护命令免受Perl的双引号interpolcation的影响,而是将其传递给shell。

您可以省略日期格式的单引号,不需要它们。

您可以使用wc -l替换awk脚本。

此外,您正在使用lsfind。通常“找到”本身就足够了。检查find手册页中的-printf选项。它可以打印所有者的用户名等等。您还可以使用find将结果限制为特定用户拥有的内容。