PHP的rsync与exec()不工作

为什么这个:

rsync -avz -e ssh /home/userneme/folder [email protected]:/var/www/folder 

从cronjob和这个作品:

 exec("rsync -avz -e ssh /home/userneme/folder [email protected]:/var/www/folder"); 

不起作用。

我知道exec是工作的,因为我有我的appp中的几个地方,使用ImageMagick(exec)从PDF到JPG的融合。

解决了

exec正在工作确定这是远程服务器上的权限问题。 “本地”服务器是共享经销商帐户,远程服务器是我的第一个VPS Ubuntu 10.10灯箱。 如果只有我有一个系统pipe理员,因为我只是一个软件开发人员被迫做到这一点,我很臭:)谢谢大家!

您的SSH密钥也应该在Apache主文件夹。 如果没有,rsync将不起作用。

问候

这可能是PATH相关的。 尝试使用完整path来执行rsync,例如

 exec("/usr/bin/rsync -avz -e ssh /home/userneme/folder [email protected]:/var/www/folder"); 

你的主机有safe_mode吗?

运行php -i |grep -i safe 。 如果安全模式打开,请查看safe_mode_exec_dir 。 如果rsync不在列出的文件夹中,那么PHP将不会执行它。

你可以让你的主机在exec_dirpath中添加一个符号链接到rsync,然后从该位置执行它。 但这取决于他们的政策是否允许。

你应该可以通过给ssh一个特定的密钥文件来在rsync的-e选项中使用。 由于您使用的是共享主机,因此您需要做的就是在安全的地方创buildssh密钥,然后将密钥放置在某个目录的主机上,尽可能安全(只能由您和apache读取),但如果任何人都知道,他们可以使用PHP脚本或其他的东西来让Apache将密钥发送给他们,如果你的主机使用suexec作为脚本,所有的脚本都在你的用户名下运行,你只能让它读取。

那么你会用

 rsync -avz -e "ssh -i /some/id_?sa_key" /home/userneme/folder [email protected]:/var/www/folder 

由于这不是很安全,所以你应该设置远程端的授权密钥文件来强制执行一个命令,至less要validation执行的命令是“rsync”。

更多关于在这里自动化rsync(包括一个脚本来validationSSH命令)。