我有一个调用shell脚本的ruby cgi脚本。
shell脚本执行git pull。
当我从命令提示符运行shell脚本时,它可以工作。
但是当我从ruby cgi脚本运行它时,它会执行脚本,但git pull不会发生。
我猜它可能与权限相关但我无法解决如何修复它。
ruby脚本是:
#!/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby
require "cgi"
git_pull = `sh /github/do_git_pull.sh`
move_apanels = `sh /github/move_apanels.sh`
puts "Content-type: text/html\n\n"
puts "<html><body>We've done the following:<ul>"
puts "<li>#{git_pull.to_s}</li>"
puts "<li>#{move_apanels.to_s}</li>"
puts "</ul></body></html>"
shell脚本是:
#!/bin/bash
sudo sh -c cd /github
sudo sh -c git pull origin master
echo "Git Pull Completed"
两个文件都有chmod 777
有什么想法吗?
答案 0 :(得分:2)
这样做:
sudo sh -c cd /github
仅在sh
命令的持续时间内更改PWD。 不会影响当前的shell。你需要cd和git pull in相同的子shell:
sudo sh -c 'cd /github && git pull origin master'
答案 1 :(得分:-1)
在脚本上设置777不会削减它。尝试找出ruby脚本执行shell脚本的用户。由于git使用SSH密钥进行身份验证,并且通常您的SSH密钥只能由您使用,因此如果其他用户尝试执行git pull,则git pull将失败。
查看this有关如何以其他用户身份运行shell脚本的问题。
还要确保目标环境中的PATH
设置正确且可访问(如果您运行Web服务器chrooted)。