Sudo 不会以其他用户身份执行命令

Sudo 不会以其他用户身份执行命令

我正在尝试让 Unicorn 服务器在服务器启动时启动。我创建了一个 shell 脚本,如果我以 ubuntu 用户身份登录并运行,该脚本就会运行

/etc/init.d/unicorn start

Shell 脚本

#!/bin/sh

case "$1" in
start)
    cd /home/ubuntu/projects/asbest/current/
    unicorn_rails -c /home/ubuntu/projects/asbest/current/config/unicorn.rb -D -E production

;;
stop)
    if ps aux | awk '{print $2 }' | grep `cat ~/projects/asbest/current/tmp/pids/unicorn.pid`> /dev/null; then kill `cat ~/projects/asbest/current/tmp/pids/uni$
;;
restart)
    $0 stop
    $0 start
;;
esac

当我重新启动服务器时,我注意到 unicorn 服务器没有监听套接字。由于我以 ubuntu 用户身份成功运行了代码,因此我修改了脚本,使其始终通过 sudo 使用 ubuntu 用户。

#!/bin/sh

case "$1" in
start)
    cd /home/ubuntu/projects/asbest/current/
    sudo -u ubuntu unicorn_rails -c /home/ubuntu/projects/asbest/current/config/unicorn.rb -D -E production
;;
stop)
    if ps aux | awk '{print $2 }' | grep `cat ~/projects/asbest/current/tmp/pids/unicorn.pid`> /dev/null; then sudo -u ubuntu kill `cat ~/projects/asbest/current/tmp/pids/uni$
;;
restart)
    $0 stop
    $0 start
;;
esac

重启后,unicorn 仍然无法启动,所以我尝试从命令行运行脚本。现在我收到以下错误

sudo: unicorn_rails: command not found

我到处寻找导致这种情况的原因,但恐怕我已经用尽了我对 Linux 的有限理解。据我所知,虽然 sudo 应该使用 ubuntu 用户来执行命令,但它仍然使用 root 用户的环境,而该环境未配置为运行 ruby​​ 或 unicorn。有人有这方面的经验吗?

答案1

使用全局变量UNICORN_*如下:

UNICORN_HOME=/the/path
UNICORN_RAIL=${UNICORN_HOME}/unicorn_rail
UNICORN_CONFIG=${UNICORN_HOME}/config/unicorn.rb
UNICORN_PID=${UNICORN_HOME}/tmp/pids/unicorn.pid
UNICORN_USER=ubuntu

sudo -u ${UNICORN_USER} ${UNICORN_RAIL} -c $UNICORN_CONFIG -D -E production

另一个好方法是提取全局变量/etc/default/unicorn

UNICORN_HOME=/the/path
UNICORN_RAIL=${UNICORN_HOME}/unicorn_rail
UNICORN_CONFIG=${UNICORN_HOME}/config/unicorn.rb
UNICORN_PID=${UNICORN_HOME}/tmp/pids/unicorn.pid
UNICORN_USER=ubuntu

并在您的初始化脚本中添加更改所有变量:

if [ -f /etc/default/unicorn ]; then
    . /etc/default/unicorn
fi

答案2

不要使用 ,而是sudo尝试使用su [username],然后执行命令。

答案3

您需要指定路径unicorn_rails

UNICORN_HOME=/home/ubuntu/projects/asbest/current
cd $UNICORN_HOME
sudo -u ubuntu $UNICORN_HOME/unicorn_rails -c $UNICORN_HOME/config/unicorn.rb -D -E production

您是否已正确配置 sudo?

相关内容