我有一个在存储库用户下运行的SVN存储库服务器.我希望在每次提交后操作后运行脚本.我写了一个shell脚本,它在每次提交后从钩子运行.它需要以root身份运行.这就是我在脚本中使用sudo的原因,但它没有用.有没有办法以root身份运行脚本?
sudo su
echo "password"
svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
chmod -R 777 /home/memarexweb/public_html/devel/
Run Code Online (Sandbox Code Playgroud)
我在四处寻找并找到了这个有用的解决方案:
编辑sudoers文件以允许在没有密码的情况下运行某些命令.
最好将post-commit脚本分成两部分,其中一部分将贯穿其中sudo.
进入/etc/sudoers:
loqman ALL=(root) NOPASSWD: /usr/local/bin/svn-postcommit-export
Run Code Online (Sandbox Code Playgroud)你的提交后挂钩:
#!/bin/sh
sudo /usr/local/bin/svn-postcommit-export
Run Code Online (Sandbox Code Playgroud)脚本/usr/local/bin/svn-postcommit-export:
#!/bin/sh
svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
chmod -R 777 /home/memarexweb/public_html/devel/
Run Code Online (Sandbox Code Playgroud)
(您可以选择任何名称并将脚本放在任何位置;我只是建议svn-postcommit-export作为示例,并/usr/local/bin作为一个公共位置.)
sudo su
Run Code Online (Sandbox Code Playgroud)
启动一个由 root 用户拥有的新进程。该进程终止或停止后,下一行将再次以执行脚本的用户身份执行。
一种可能的解决方案是使用 sudo 运行整个脚本,并授予其使用 sudo 的权限来执行脚本。为此,您需要/etc/sudoers使用visudo命令编辑文件。