如何通过php exec命令获取rsync运行的进度

时间:2014-11-13 22:12:00

标签: php exec output rsync progress

我有一个带有rsync命令的shell脚本(rsync.sh):

  

rsync -rtlv --password-file = / path / to / password / file / file.txt --bwlimit = 5000 / local / root / path / $ 1 username @ remoteserver :: remote / root / path / $ 2 < / p>

然后我使用exec命令从PHP(rsync.php)运行它:

  

exec('/ path / to / shell / script / rsync.sh local / specific / path / remote / specific / path /',$ progress,$ errors);

一切正常。一旦完成,我就会得到进展并解析它。到目前为止,我只测试了一些较小的文件。但是,一旦投入生产,我预计这将在几个大文件上完成,这将需要一个多小时才能完成。我希望能够查看正在发生的进展。如果我把--progress标志放在那里,我不确定我将如何通过exec获得进展。有什么想法吗?

我想我必须使exec异步并以某种方式将进度发布到可以收集和显示它的数据库中。

1 个答案:

答案 0 :(得分:0)

你做不到。在命令完成之前,PHP exec()函数不会返回。

对于PHP来说,这实际上不是一项非常好的任务 - Web服务器通常无法很好地处理需要数小时才能完成的PHP脚本(因此也就是Web请求)。话虽这么说,您将能够使用proc_open()函数系列使更接近达到预期的行为,这允许您启动与PHP脚本并行运行的进程。