在ubuntu下以特定用户身份执行服务

在ubuntu下以特定用户身份执行服务

我正在运行一个游戏服务器,并希望在系统启动时在屏幕上启动它,但屏幕是特定于用户的,所以我必须以“用户”的身份运行命令。所以我写了这个简短的服务脚本,它以“用户”的身份启动:

#!/bin/sh
#/etc/init.d/gameserver                                                                                                                     

case "$1" in
  -user)
    sleep 1
    case "$2" in
      start)
        echo "Starting server..."
        screen -dmS scr1 /home/user/game/run.sh
        echo "Server started"
        ;;
      stop) #definitely unfinished 
        echo "Stopping Server..."
        #screen -S scr1 say Server is going down for a halt now!
        #sleep 1
        #screen -S scr1 stop
        echo "Server stopped"
        ;;
      *)
        echo "Usage: /etc/init.d/gameserver {start|stop}"
        exit 1
        ;;
    esac
    ;;
  *)
    su - user  -c "bash -c  '/etc/init.d/gameserver -user $1'"
    ;;
esac

exit 0

sudo update-rc.d gameserver defaults命令运行正常后sudo service gameserver start,但遗憾的是服务器没有在系统启动时启动。我正在运行 Ubuntu 12.04 x64

编辑:我尝试替换su -csetuid仍然没有变化。

答案1

您需要启用它以在启动时启动

update-rc.d 游戏服务器启用

或者如果你手动执行;你很可能需要符号链接(/etc/rc2.d)来/etc/init.d/gameserver

ln -s /etc/init.d/gameserver /etc/rc2.d/S99gameserver

并在关机时停止它并重新启动这两个

ln -s /etc/init.d/gameserver /etc/rc0.d/K99gameserver

ln -s /etc/init.d/gameserver /etc/rc6.d/K99gameserver

编辑

在您的初始化脚本中明确设置 PATH;它可能会失败,因为它找不到您尝试运行的“ ” 和“ ”screenbash位置su

设置路径做;

导出 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin

#!/bin/bash在脚本中立即设置此项

相关内容