如何以root(sudo)身份运行shell脚本?

Loq*_*man 7 svn shell sudo

我有一个在存储库用户下运行的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)

Loq*_*man 8

我在四处寻找并找到了这个有用的解决方案:

编辑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作为一个公共位置.)


pvo*_*ten 7

sudo su
Run Code Online (Sandbox Code Playgroud)

启动一个由 root 用户拥有的新进程。该进程终止或停止后,下一行将再次以执行脚本的用户身份执行。

一种可能的解决方案是使用 sudo 运行整个脚本,并授予其使用 sudo 的权限来执行脚本。为此,您需要/etc/sudoers使用visudo命令编辑文件。


Kev*_*vin 6

以 root 身份运行脚本:

sudo sh your-script.sh
Run Code Online (Sandbox Code Playgroud)