2013-03-06 38 views
1

我有一个脚本在PHP中运行以下shell_exec cmd。Git POST webhook shell_exec

echo shell_exec('cd /var/www/Library/Laravel/ ; git pull bitbucket master ; 2>&1'); 

这是由一个网络挂接服务叫了,我想要做的就是切断其在此开发环境每次我们推到拉。

但是,在调用此路由时,我不会收到任何输出错误或任何内容。任何人都可以提出为什么这可能是?

我从error_log中这呼应 - >

error: cannot open .git/FETCH_HEAD: Permission denied 

我加入了Apache用户与git,现在我得到以下错误

Could not create directory '/var/www/.ssh'. 
Host key verification failed. 
fatal: The remote end hung up unexpectedly 

回答

0

在这里我看到了几个问题:

1)你的exec行“...; git pull bitbucket master; 2> & 1”应该是“... git pull bitbucket master 2”& 1“ - extrane ous分号可能会阻止您看到标准错误输出。

2)你找到了归属问题,所以...

3)我猜你有一个基于 “SSH” 混帐URL。第一次以用户身份运行SSH时,它将尝试验证主机密钥(另一端的SSH标识)。如果该工具不是交互式的并且您尚未接受该密钥,则SSH的默认行为将失败。或者,如果您接受了密钥,但您已经看到了相同的行为,但此后已更改。你会以不同的方式解决这两个不同的问题

解决这个问题的“正确”方法是手动运行命令(以具有相应HOME变量集的用户身份)并手动接受密钥,以便后续命令将“正常工作”。

另一种可能性是重写SSH的默认行为 - 请参阅“StrictHostKeyChecking”SSH选项的文档。你可以在命令行上通过一些黑客行为来传递它,或者创建一个指定选项的〜/ .ssh/config文件。 (注意:我推荐第一个解决方案,除非你了解安全含义,否则不推荐这个解决方案。)

最后,我怀疑你还需要设置你的SSH私钥以允许你像用户一样好。