1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Solved - Iniciar hlds no arranque do sistema

Discussão em 'Dúvidas e Suporte Técnico - GNU/Linux & *nix' iniciada por Frango., 8 de Janeiro de 2009. (Respostas: 8; Visualizações: 1586)

  1. Frango.

    Frango. Power Member

    Boas

    Tenho o hlds instalado no meu server debian, mas se quiser reiniciar/desligar o servidor ao ligar novamente tenho de arrancar manualmente. Já googlei muito e encontrei um script, porém não funciona diz que não foi encontrado o /bin/bash. O código é este:

    Código:
    #! /bin/bash
    #
    # Start the Counter-Strike dedicated server.
    #
    # AUTHORS :
    #
    # Julien Escario ( [email protected] )
    # &
    # Cedric Rochat ( [email protected] )
    # &
    # Cmdr._Firewalker ( [email protected] )
    #
    # ===========================================
    #
    # What you need:
    #
    # Linux :)
    # awk
    # screen
    # the hlds_l & cstrike files (obtainable via steam)
    #
    # How to use:
    #
    # Edit the CS_USER-Var to the user running your cs-servers.
    # Edit the DIR-Var to fit your system (just contains the path to the dir that contains hlds_run).
    # Edit the PARAMS-Var to fit your needs - standard is startup as internet server.
    # If you want to use multiple scripts on one system change the NAME-var.
    #
    # When this is done, copy the file to /etc/init.d (or whereever your system stores the
    # scripts for starting services) and set the execute permission.
    # Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
    # ln -s /etc/init.d/hlds /etc/rc3.d/S90hlds
    # ln -s /etc/init.d/hlds /etc/rc3.d/K50hlds
    # or use update-rc.d (Debian etc.) or similar systools.
    #
    # Or use it manually like:
    # ./hlds start
    # ./hlds stop
    #
    # To see the server-console start the script with the parameter "watch".
    #
    # DOC by jwm ([email protected])
    
    # ===========================================
    # !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!!
    CS_USER=root
    
    # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
    DIR=/usr/hlds
    
    # LAN server:
    # PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
    # Internet server:
    PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015"
    
    NAME=csserver
    DESC="CS dedicated server"
    
    # No edits (should be) necessary beyond this line
    # ===========================================
    DAEMON=hlds_run
    PATH=/bin:/usr/bin:/sbin:/usr/sbin
    
    if ! which awk; then echo "You need awk for the script $0"; exit 1; fi
    if ! which screen; then echo "You need screen (the program, moron!) for the script $0"; exit 1; fi
    
    if [ `whoami` = root ]
    then
     usagetype=root
    else
     usagetype=nonroot
    fi
    
    start() {
       if [ ! -d $DIR ]; then echo " ... No such directory: $DIR!";  exit 1; fi
       if [ ! -x $DIR/$DAEMON ]; then echo "$DIR/$DAEMON does not exist or is not executable!"; exit 1; fi
       if status; then echo " ... $DESC: $NAME is already running!"; exit 1; fi
    
       case "$usagetype" in
       root)
        su - $CS_USER -c "cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS"
       ;;
       nonroot)
        cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS
       ;;
       esac
    
    }
    
    stop () {
       if ! status; then echo " ... $DESC $NAME could not be found. Probably not running."; exit 1; fi
    
       case "$usagetype" in
       root)
        tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
        su - $CS_USER -c "screen -r $tmp -X quit"
       ;;
       nonroot)
        screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit
       ;;
       esac
    }
    
    status () {
       case "$usagetype" in
       root)
        su - $CS_USER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null
       ;;
       nonroot)
        screen -ls | grep [.]$NAME[[:space:]] > /dev/null
       ;;
       esac
    }
    
    watch () {
       if ! status; then echo "$DESC $NAME could not be found. Probably not running."; exit 1; fi
    
       case "$usagetype" in
       root)
        tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
        su - $CS_USER -c "screen -r $tmp"
       ;;
       nonroot)
        screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
       ;;
       esac
    }
    
    case "$1" in
     start)
      echo "Starting $DESC: $NAME"
      start
      echo " ... done."
     ;;
    
     stop)
      echo "Stopping $DESC: $NAME"
      stop
      echo " ... done."
     ;;
    
     restart|force-reload)
      echo "Restarting $DESC: $NAME"
      status && stop
      start
      echo " ... done."
     ;;
    
     status)
      if status
      then echo "$DESC: $NAME is UP" 
      else echo "$DESC: $NAME is DOWN"
      fi
     ;;
     watch)
      watch
     ;;
    
     *)
       echo -e "Usage: $0 {start|stop|status|restart|watch}\nWhile watching press ctrl-a, ctrl-d to stop watching without stopping the server."
       exit 1
     ;;
    
    esac
    
    
    exit 0
    Alguém me pode ajudar? É muito importante e já a um dia que ando nisto, se souberem outra forma de iniciar no boot agradecia que postassem. Lembrando também que tenho webmin.

    Cumprimentos
     
  2. Condez

    Condez [email protected] Member

    La para o inicio do script, tens umas linhas que dizem:

    # Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
    # ln -s /etc/init.d/hlds /etc/rc3.d/S90hlds
    # ln -s /etc/init.d/hlds /etc/rc3.d/K50hlds

    Fizeste essa parte?

    As directorias "/etc/rc*.d" sao responsaveis por parar/iniciar automaticamente os servicos confiurados no respectivo runlevel.

    Se por acaso fizeste, e seguiste mesmo a letra, tambem nao ira funcionar.
    Visto que esse exemplo e para runlevel 3 (tal como e indicado) mas Debian (e derivados) correm em runlevel 2, por defeito.
    Logo tens que substituir "rc3.d" por "rc2.d".
     
  3. omni0ne

    omni0ne Power Member

    Olhando para a primeira linha do script, não costuma levar um espaço, mas não deveria afectar nada, ficando assim:

    Código:
    #!/bin/bash
    Se não der experimenta:

    Código:
    #!/bin/sh
     
  4. Frango.

    Frango. Power Member

    Sim eu fiz isso.

    Fiz o que disseste e não deu na mesma, o erro que dá é este:

    /etc/init.d/rc: /etc/rc2.d/S90hlds: /bin/sh^M: bad interpreter: No such file or directory

    o problema é que existe essa pasta/ficheiro só não percebo é o que é ^M
     
  5. Condez

    Condez [email protected] Member

    Isso parece ser a conversao de caracters.
    Experimenta correr o commando "dos2unix" nesse ficheiro para limpar qualquer codificacao windows.


    Dizes que se correres o ficheiro manualmente, tudo funciona.
    Como e que o corres? Executa-lo simplesmente "./(ficheiro)" ou usas "bash (ficheiro)"?
     
  6. Frango.

    Frango. Power Member

    Sim, uso:

    cd /usr/hlds
    ./hlds_run -game cstrike blablabla

    e tudo funciona
     
  7. Frango.

    Frango. Power Member

  8. Condez

    Condez [email protected] Member

    1)
    O script que esta a dar problemas e o "/etc/init.d/hlds".
    Ja experimentas-te arrancar o jogo atraves do "/etc/init.d/hlds" ao inves de correres o executavel directamente?


    2)
    Chegaste a correr o programa "dos2unix" no ficheiro "/etc/init.d/hlds"?


    3)
    Logo apos a primeira linha "#!/bin/bash" adiciona o seguinte:

    exec > /tmp/hlds.out 2>>&1

    Isto vai redireccionar o stdout e stderr do script para o ficheiro "/tmp/hlds.out".
    Reinicia a maquina e analisa o conteudo desse ficheiro.
     
    Última edição: 11 de Janeiro de 2009
  9. Frango.

    Frango. Power Member

    Obrigado pela tua ajuda, mas deparei-me por acaso com um site que no fim explicava como iniciar no boot o hlds. E como fiz? Editei o /etc/rc.local e adicionei isto antes do exit 0:

    Código:
    cd /usr/hlds
    ./hlds_run -game cstrike -autoupdate +maxplayers 20 +map de_dust2 > /dev/null 2>&1 &
    Afinal é simples fazer este tipo de coisas, mas como sou novo em linux em text-mode tenho de me habituar :p
     

Partilhar esta Página