使用system(),exec()或反引号运行/ scripts / pkgacct

时间:2013-10-21 08:08:01

标签: perl backup exec cpanel

我有一个小的perl脚本,使用/scripts/pkgacct在cPanel中运行system()命令。代码看起来像这样;

print  "\n/scripts/pkgacct --skiphomedir --nocompress $acc_name /my_backup\n\n";
system("/scripts/pkgacct --skiphomedir --nocompress $acc_name /my_backup");
my $bk_path = "/my_backup/cpmove-$acc_name.tar";
system("tar -xvf $bk_path -C /my_backup/");

运行脚本时,只备份cPanel的默认roundcubehorde数据库。当我用system()替换exec""时,脚本按预期运行,但只要执行exec就终止,即perl脚本中的后续语句不会执行。使用反引号显示与system()相同的行为 - 即不备份所有数据库。

有人能告诉我我犯了什么错误吗?

或者,如何在exec命令后执行剩余的语句?

2 个答案:

答案 0 :(得分:0)

尝试使用类似的系统:

system('/ scripts / pkgacct',' - skiphomedir',' - nocompress',$ acc_name,'/ my_backup');

我发现当你按照预期分解命令和参数时,系统效果最好。

答案 1 :(得分:0)

尝试使用IPC :: Run(https://metacpan.org/pod/IPC::Run)。您的代码看起来像:

use IPC::Run qw(run);

print  "\n/scripts/pkgacct --skiphomedir --nocompress $acc_name /my_backup\n\n";
run ['/scripts/pkgacct', '--skiphomedir', '--nocompress', $acc_name];
my $bk_path = "/my_backup/cpmove-$acc_name.tar";
run ['tar','-xvf',$bk_path,'-C','/my_backup/'];