如何在git post-receive hook中以root身份执行命令

Modified on: Thu, 06 Dec 2018 20:20:03 +0800

我最近在服务器上为一个运行为Upstart服务的Web应用程序设置了一个远程git仓库。我想使用post-receive挂钩来触发更新应用程序代码所需的操作,然后停止然后重新启动upstart服务。这是我的repo.git / hooks / post-receive文件:

#!/bin/bash export GIT_WORK_TREE=/var/www/current/myapp/ echo "Checking out new files and restarting app" echo $USER git checkout -f sudo /sbin/stop myapp-service sudo /sbin/start myapp-service

基于我在此处阅读的信息:askUbuntu.com,以root身份执行upstart命令的方法是编辑我的visudo文件。以下是相关摘录:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

但是当我git推送到遥控器时,我得到的输出如下:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service

我已检查过正确的用户正在执行收发后脚本(admin,如上所述)。

有人可以帮助我停止然后在git post-receive钩子脚本中启动Upstart作业吗? Python,PHP或node.js javascript脚本也可以接受,如果他们能够比bash更容易执行upstart命令(我是一个bash新手)

我查看了我的身份验证日志,这就是我所拥有的:

$ git commit -am "test" && git push prod master
[master 59ffccd] test
 1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 544 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Checking out new files on production and restarting app
remote: admin
remote: 
remote: sudo: no tty present and no askpass program specified
remote: Sorry, try again.
作者:Community,djheru

最佳答案

您需要使用逗号分隔sudoers文件中的命令。现在,您正在授权一个命令:/sbin/start myapp-service /sbin/stop myapp-service

您需要编写admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service, /sbin/stop myapp-service


相关问答

添加新评论