以特定用户身份启动进程

以特定用户身份启动进程

我有以下重新启动的脚本上帝当我重启我的服务器(Ubuntu)时。我怎样才能让 god 以用户“rails”的身份启动?

#!/bin/sh

### BEGIN INIT INFO
# Provides:             god
# Required-Start:       $all
# Required-Stop:        $all
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    God
### END INIT INFO

NAME=god
DESC=god
PID=/home/rails/xxx/shared/pids/god.pid
LOG=/home/rails/xxx/shared/log/god.log

set -e

# Make sure the binary and the config file are present before proceeding
test -x /usr/bin/god || exit 0

# Create this file and put in a variable called GOD_CONFIG, pointing to
# your God configuration file
test -f /etc/default/god && . /etc/default/god
[ $GOD_CONFIG ] || exit 0

. /lib/lsb/init-functions

RETVAL=0

case "$1" in
  start)
    echo -n "Starting $DESC: "
    /bin/su rails -c '/usr/bin/god -c $GOD_CONFIG -P $PID -l $LOG'
    RETVAL=$?
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    kill `cat $PID`
    RETVAL=$?
    echo "$NAME."
    ;;
  restart)
    echo -n "Restarting $DESC: "
    kill `cat $PID`
    /bin/su rails -c '/usr/bin/god -c $GOD_CONFIG -P $PID -l $LOG'
    RETVAL=$?
    echo "$NAME."
    ;;
  status)
    /bin/su rails -c '/usr/bin/god status'
    RETVAL=$?
    ;;
  *)
    echo "Usage: god {start|stop|restart|status}"
    exit 1
    ;;
esac

exit $RETVAL

任何帮助都将非常感谢,因为在服务器方面我完全是新手。

答案1

sudo 命令用于以其他用户的身份运行程序,例如:

sudo -u rails ls $someDir

所以我认为以下应该可行(尝试一下看看):

sudo -u rails /usr/bin/god -c $GOD_CONFIG -P /var/run/god.pid -l /var/log/god.log

另外,检查 sudo 手册页,god 命令依赖于正在设置的某些环境变量......

答案2

检查脚本的权限。它们应该是所有人都可读和可执行的。

另外,在脚本的几个地方,您有:

usr/bin/god ...

可能应该是:

/usr/bin/god ...

答案3

这通常在初始化脚本中通过以下方式实现su

su rails -c "/usr/bin/god -c $GOD_CONFIG -P /var/run/god.pid -l /var/log/god.log"

我还没有测试过,所以可能遇到了一些奇怪的错误。

此外,假设它到目前为止一直以 root 身份运行,请确保您的 pid 和日志文件不属于 root 所有,并且用户 rails 无法访问。

相关内容