我有一个小的Perl脚本,它使用system()
在cPanel中运行/scripts/pkgacct
命令。代码如下:
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
命令后面的代码仍然可以执行?
/scripts/pkgacct
可以正常工作,备份所有内容,包括数据库(由于跳过参数--skiphomedir,不包括主目录)。此外,如果我在单独的Perl脚本中运行/scripts/pkgacct
作为单行语句(即除pkgacct之外没有其他语句),它也可以正常工作。 - rahuLprint
语句的目的。 - rahuLexec
之后使剩余的代码运行,你可以使用fork
在子进程中exec
,然后在父进程中wait
。 - DeVadder