我正在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的输出。请帮我解决这个问题,因为我遇到了自动化脚本
答案 0 :(得分:0)
尝试使用qx{}
代替反引号运算符。
特别是您可以使用qx' ...'
。
使用单引号作为分隔符可以保护命令免受Perl的双引号interpolcation的影响,而是将其传递给shell。
您可以省略日期格式的单引号,不需要它们。
您可以使用wc -l
替换awk脚本。
此外,您正在使用ls
和find
。通常“找到”本身就足够了。检查find
手册页中的-printf选项。它可以打印所有者的用户名等等。您还可以使用find将结果限制为特定用户拥有的内容。