fragen stichworte

Führen Sie einen Dienst als bestimmter Benutzer unter Ubuntu aus

Ich führe einen Gameserver aus und möchte ihn beim Systemstart auf einem Bildschirm starten. Der Bildschirm ist jedoch benutzerspezifisch. Daher muss ich den Befehl als "Benutzer" ausführen. Also habe ich dieses kurze Service-Skript geschrieben, das sich selbst als 'Benutzer' startet:

#!/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

und nach sudo update-rc.d gameserver defaults läuft der Befehl sudo service gameserver start einwandfrei, aber der Server wird beim Systemstart nicht gestartet. Ich verwende Ubuntu 12.04 x64

edit: Ich habe versucht, su -c durch setuid zu ersetzen, aber immer noch keine Änderung.

antworten

Sie müssen das Booten zur Startzeit

ermöglichen

update-rc.d gameserver enable

oder wenn Sie dies manuell tun; Sie benötigen wahrscheinlich einen Symlink (/etc/rc2.d) zu /etc/init.d/gameserver

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

und beim Herunterfahren stoppen und diese beiden

neu starten

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

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

bearbeiten

explizit PATH in Ihrem Init-Skript setzen; Es schlägt wahrscheinlich fehl, weil es nicht finden kann, wo 'screen' 'bash' und 'su' Sie versuchen, dort zu laufen,

um den Pfad zu setzen;

export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin

Setzen Sie dies gleich nach #!/bin/bash in Ihrem Skript