【发布时间】:2012-03-22 03:47:44
【问题描述】:
这是 bash 脚本:
#!/bin/bash
echo "$NODE_ENV"
(
echo $USER;
echo $PATH;
cd /opt/chat-staging/;
git pull;
NODE_ENV=staging;
echo "Set NODE_ENV to $NODE_ENV";
node leaderboard.js & node app.js;
echo "Started leaderboard.js";
echo "Started app.js";
)
echo "NODE_ENV is now $NODE_ENV"
这是 PHP 脚本:
<?php
exec('/bin/bash /opt/chat-staging/start_app.sh 2>&1', &$output, &$return_var);
print_r($output);
print $return_var;
?>
我将它设置为 github 提交后挂钩,但这是输出:
数组 ( [0] => [1] => www-data [2] => /usr/bin [3] => /usr/lib/git-core/git-sh-setup: 90: sed: 未找到 [4] => basename: 写入错误:损坏的管道 [5] => /usr/lib/git-core/git-sh-setup: 212: uname: 未找到 [6] => 主机密钥验证失败。 [7] => 致命: 远端意外挂断 [8] => 将 NODE_ENV 设置为暂存 [9] => /opt/chat-staging/start_app.sh:第 11 行:节点:未找到命令 [10] => /opt/chat-staging/start_app.sh:第 11 行:节点:未找到命令 找到 [11] => 启动 leaderboard.js [12] => 启动 app.js [13] => NODE_ENV 现在是 ) 0
/opt/chat-staging/ 归“www-pub”所有;在 /etc/groups 中,我有“www-pub:x:1000:www-data,root”。
那么为什么这不起作用?我什至在 /var/www/.ssh/id_rsa 中有一个 RSA 密钥,并将公钥添加为 GitHub 部署密钥。
编辑、补充
我添加了一个 git remote -v;到脚本,就在“git pull”之前。
root@li70-243:/opt/chat-staging# su - www-data
$ bash /opt/chat-staging/start_app.sh
origin git@github.com:zackster/CompassionPit--Node-.git (fetch)
origin git@github.com:zackster/CompassionPit--Node-.git (push)
Already up-to-date.
而我仍然看到 PHP 输出...
数组 ( [0] => 来源 git@github.com:zackster/CompassionPit--Node-.git (fetch) [1] => origin git@github.com:zackster/CompassionPit--Node-.git (推)[2] => 大师 [3] => * 声誉 [4] => /usr/lib/git-core/git-sh-setup: 90: sed: 未找到 [5] => basename: 写入错误:管道损坏 [6] => /usr/lib/git-core/git-sh-setup: 212: uname: 未找到 [7] => /usr/lib/git-core/git-pull: 244: sed: 没有 found [8] => 您的配置指定与 ref 合并 'reputation' [9] => 来自远程,但没有获取这样的 ref。
【问题讨论】:
-
为什么要使用 PHP 脚本??
-
/var/www 不是 www-pub 和 www-data 的主目录,它们基本上没有。
-
从控制台手动调试 bash 脚本 - 在执行期间您有很多错误
-
@knittl,我使用 PHP 脚本,因为它非常简单。对我来说最少的击键次数。
-
@knittl 如果您能推荐一个更好、更快、更智能、更安全的解决方案 - 我将实施 那个 !我总是渴望学习
标签: php git bash github ssh-keys