我有一个小的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的默认roundcube
和horde
数据库。当我用system()
替换exec""
时,脚本按预期运行,但只要执行exec
就终止,即perl脚本中的后续语句不会执行。使用反引号显示与system()
相同的行为 - 即不备份所有数据库。
有人能告诉我我犯了什么错误吗?
或者,如何在exec
命令后执行剩余的语句?
答案 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/'];