Назад | Перейти на главную страницу

Запустить службу от имени конкретного пользователя в 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 -c с участием setuid но все равно без изменений.

Вам нужно включить его, чтобы он запускался во время загрузки

update-rc.d gameserver включить

или если вы делаете это вручную; вам, скорее всего, понадобится символическая ссылка (/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 в вашем сценарии инициализации; скорее всего, он не работает, потому что не может найти где »screen''bash' и 'su'вы пытаетесь бежать там

установить путь делать;

экспорт ПУТЬ = / sbin: / bin: / usr / sbin: / usr / bin: / usr / local / bin: / usr / local / sbin

установите это сразу после #!/bin/bash в вашем сценарии