Shellscript for starting/stopping/restarting an ET-Server

Old server topics and posts from 2006, Read only
Veteran
User avatar
Posts: 990
Joined: Mon Nov 13, 2006 1:00
Location: World -> Europe -> Germany -> Swabia

Shellscript for starting/stopping/restarting an ET-Server

Postby Stormcrow » Tue Dec 05, 2006 13:42

Howdy guys,

i have written a script for starting/stopping/restarting a ET-Server. Later on, I want to combine it with a PHP-Script, so that i can let other ppl do start, restart or stop the server without give them a ssh-account.

Maybe the proficient ppl here can have a look at it and try the script.

Code: Select all
#!/bin/bash
##gamestart.sh
##Start/Stop/Restart Gameservers by Script ***BETA***
##Could be extended/changed for other Games
##Created by >>>|Stormcrow

##global

RED="\033[31m\t"
GREEN="\033[32m"
BLACK="\033[m"
TMP_DIR="/tmp"
PID="/tmp/$1.pid"
SCREEN="/usr/bin/screen"

## enemy territory

ET_EX="etded"
ET_NAME="EnemyTerritory"
ET_DIR="/usr/local/games/enemy-territory"
ET_PARAMS=" +set dedicated 2 +set sv_punkbuster 1 +exec server.cfg"


## usage

function usage()         {
                          echo -e "\nusage:  $0 <game> <command>"
           echo -e "\t$0 status\n"
                          echo -e "\tgame:     et"
                          echo -e "\tcommand:  start | restart | stop | see"
}

## start server

function server_start()  { 
                         
                          [ -f $PID ] && echo -e "\n\t$RED $5 already running!$BLACK\n" && exit 1
                          cd $2
                          $SCREEN -dmS $1 ./$3 $4
                $SCREEN -ls |grep $1 |awk -F . '{print $1}'|awk '{print $1}' > $PID
                echo -e "\n\t$GREEN $5 started!$BLACK\n"
               
           exit 0

}

## restart server


function server_restart(){

                          if [ ! -f $PID ]; then
          
               echo -e "\n\t$RED $5 is not running!$BLACK\n"
              
               cd $2
                    $SCREEN -dmS $1 ./$3 $4
                    $SCREEN -ls |grep $1 |awk -F . '{print $1}'|awk '{print $1}' > $PID
                    echo -e "\n\t$GREEN $5 started!$BLACK\n"
              
               exit 0     
               
           fi
          
           kill $(head $PID -n1 -q)
                rm $PID
                echo -e "\n\t$GREEN $5 stopped!$BLACK\n"
                sleep 1
          
                     cd $2
                $SCREEN -dmS $1 ./$3 $4
                $SCREEN -ls |grep $1 |awk -F . '{print $1}'|awk '{print $1}' > $PID
                echo -e "\n\t$GREEN $5 restarted!$BLACK\n"

                exit 0
          
}

## stop server

function server_stop()   {

                          [ ! -f $PID ] && echo -e "\n\t$RED $1 is not running!$BLACK\n" && exit 1  ## server running?
                kill $(head $PID -n1 -q)
                rm $PID
                            echo -e "\n\t$GREEN $1 stopped.$BLACK\n"
                exit 0

}


function server_see()    {

                          $SCREEN -r $1
                exit 0

}



[ ! -w $TMP_DIR ] && echo -e "\n\t$RED Error: TMP_DIR not writable!\n" && exit 1

[ ! -x $SCREEN ] && echo -e "\n\t$RED Error: $SCREEN could not be found!\n" && exit 1


if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then

    usage
    exit 0
   
fi   


if [ "$1" == "status" ]; then

  [ ! -f $TMP_DIR/et.pid ]
  echo -e "\n\t$GREEN Gameserver is not running!$BLACK\n" && exit 0
 
  [ -f $TMP_DIR/et.pid ] && echo -e "\n\t$GREEN $ET_NAME is running!$BLACK"   
  echo
  exit 0
 
fi


if [ $# -ne 2 ]; then

    echo -e "\n\t$RED Error: $BLACK wrong parameter(s)\n"
    usage
    exit 1
   
fi

case "$2" in

  "start"   ) ;;
 
  "restart" ) ;;
 
  "stop"    ) ;;
 
  "see"     ) ;;
 
  *         ) echo -e "\n\t$REDError: $BLACK $2 is not valid!\n"
         usage
         exit 1
         ;;
        
esac        

 
              if [ "$2" == "start" ]; then
        
                  server_start $1 "$ET_DIR" "$ET_EX" "$ET_PARAMS" "$ET_NAME"
      
              fi
        
         if [ "$2" == "restart" ]; then
          
                  server_restart $1 "$ET_DIR" "$ET_EX" "$ET_PARAMS" "$ET_NAME"
      
              fi
        
         if [ "$2" == "stop" ]; then
        
             server_stop "$ET_NAME"
      
              fi
        
         if [ "$2" == "see" ]; then
                 
        server_see $1

         fi          
          
     ;;


I know its not the Help Desk, but I have still a question.

I tried to run two ET-Servers on my Laptop, i installed ET in the standard-folder(usr/local/games..../) and created two more users, et1 and et2. Then tried to run the server in the individual user modes, but it doesnt work (couldn't load default.cfg). If i run one et-server on root it works perfectly, but neither i dont want them to run in superuser mode nor i only want one server running, i need two.

It's a project for university, so i hope u could help me

So long,
Michel
Image
Pls Foxxy, teach me how to "master-bait" :-P

PS Founder
User avatar
Posts: 2405
Joined: Wed Apr 26, 2006 0:00

Postby landser » Tue Dec 05, 2006 15:35

realy nice post :D


i dont know, but maybe needa set the chmod?


Code: Select all
chmod -R 777 enemy-territory


so you can start the server ... but i dont think it will work ...



i think you forgot to put a server.cfg in the mod folder (etpub / shrub / etpro) or you forgot to run a map (+map oasis)





maybe do: ./etded.x86 +set fs_homepath /usr/local.../enemy-territory +set fs_basepath /usr/local.../enemy-territory +exec server.cfg +map oasis +set com_hunkemgs 192


or maybe give your account the files ...

Code: Select all
chown -R dictionaryname:username filepath


would be for u:
Code: Select all
chown -R enemy-territory:et1 /usr/local.../enemy-territory




EDIT: i think you only forgot to set in startfile: +map oasis
or make +exec maprotation.cfg

and write a maprotation.cfg

like:

Code: Select all
set d1 "set g_gametype 2 ; map oasis ; set nextmap vstr d2"
set d2 "set g_gametype 2 ; map goldrush ; set nextmap vstr d3"
set d3 "set g_gametype 2 ; map fueldump ; set nextmap vstr d4"
set d4 "set g_gametype 2 ; map railgun ; set nextmap vstr d5"
set d5 "set g_gametype 2 ; map battery ; set nextmap vstr d6"
set d6 "set g_gametype 2 ; map radar ; set nextmap vstr d7"
set d7 "set g_gametype 2 ; map venice ; set nextmap vstr d1"
vstr d1


explanation:

stuff starts with d1 ... d1 = map oasis, after oasis (d1) it will come d2 ... d2 = goldrush after goldrush (d2) it will come d3 and d3 = fueldump ... and so on :D



EDIT2:

It's a project for university, so i hope u could help me

So long,
Michel


learning in school / university how to set up an etserver ... and people say they would only learn unusefull stuff in school :roll:

Official Member
User avatar
Posts: 2497
Joined: Tue May 23, 2006 0:00
Location: In my pants (hopefully)

Postby Ammz » Tue Dec 05, 2006 15:54

It couldn't load the default cfg??

Ehm very wierd error.

This link may help you.

http://tjw.org/etded/

Veteran
User avatar
Posts: 990
Joined: Mon Nov 13, 2006 1:00
Location: World -> Europe -> Germany -> Swabia

Postby Stormcrow » Tue Dec 05, 2006 16:13

My server.cfg looks like that

Code: Select all
\\Basic\\



//set dedicated "0"

//set net_ip ""

//set net_port "27960"





\\Clients and passwords\\



set sv_maxclients "32"

set g_password ""

set sv_privateclients "2"

set sv_privatepassword "blublub"

set rconpassword "blabla"

set refereePassword "blabla1"





\\DL & RATE\\



set sv_maxRate "16000"

set sv_dl_maxRate "42000"

set sv_allowDownload "1"

set sv_wwwDownload "0"

set sv_wwwBaseURL ""

set sv_wwwDlDisconnected "0"

set sv_wwwFallbackURL ""





\\MOTD & Hostname\\



set sv_hostname "^1Test^2Server"

set server_motd0 "^WHave phun"

set server_motd1 "^PDont break the rules"

set server_motd2 "^STESTETSTEST"

set server_motd3 ""

set server_motd4 ""

set server_motd5 ""



// TEAMS
set g_autofireteams "1"
set g_teamforcebalance "1"
set g_noTeamSwitching "0"
set g_heavyWeaponRestriction "20"
set team_maxplayers "0"
set team_nocontrols "1"





\\MISC Settings\\



set g_antilag "1"

set g_altStopwatchMode "0"

set g_complaintlimit "8"

set g_ipcomplaintlimit "3"
set g_disableComplaints "7"

set g_fastres "0"

set g_friendlyFire "1"

set g_minGameClients "4"

set g_maxlives "0"

set g_alliedmaxlives "0"

set g_axismaxlives "0"

set g_teamforcebalance "1"

set g_noTeamSwitching "0"

set g_voiceChatsAllowed "4"

set g_doWarmup "1"

set g_warmup "10"
set g_inactivity "300"

set g_spectatorInactivity "600"

set sv_floodProtect "1"

set sv_pure "1"

set sv_minping "0"

set sv_maxping "180"

set match_latejoin "1"

set match_minplayers "4"

set match_mutespecs "0"

set match_readypercent "100"

set match_timeoutcount "0"

set match_warmupDamage "1"

set team_maxplayers "0"

set team_nocontrols "1"

set pmove_fixed "0"

set pmove_msec "8"

set team_maxPanzers "-1"

set sv_fps "20"

set g_autofireteams "1"

set logfile "0"

set g_log "server.log"

set g_gametype "4"

set com_hunkmegs "54"

set com_zonemegs "24"

set sv_allowAnonymous "1"





\\PunkBuster\\



//pb_sv_disable

pb_sv_autoUpdBan 1
pb_sv_CQC 1
pb_sv_KickLen 2
PB_SV_MaxConDls 4
PB_SV_MaxDlRate 4
Pb_sv_noguidgrace 30
pb_sv_updategrace 300
pb_sv_guidrelax 0
pb_sv_scoreKick -9
pb_sv_specname ETTV

pb_sv_dupNameGrace 20
pb_sv_changePeriod 20
pb_sv_changeMax 5
pb_sv_EmptyName 0
pb_sv_minName 1
pb_sv_extChar 1

pb_sv_badname 20 TEAMMATE
pb_sv_badname 20 teamate
pb_sv_badname 20 disguised
pb_sv_badname 20 disguised
pb_sv_badname 20 disgised
pb_sv_badname 20 desguised
pb_sv_badname 20 desgised
pb_sv_badname 0 teamkill
pb_sv_badname 20 hitler
pb_sv_badname 20 nazi

set g_banIPs ""
set g_filterBan "1"
pb_sv_banload




\\Extra\\



//sets CPU ""

//sets Connection ""

sets Administrator ">>>|Stormcrow"

//sets ICQ ""

//sets MSN ""

//sets MAIL ""

sets Location "Germany"

//sets URL ""





\\LMS\\



set g_lms_teamForceBalance "1"

set g_lms_roundlimit "3"

set g_lms_matchlimit "2"

set g_lms_currentMatch "0"

set g_lms_lockTeams "1"

set g_lms_followTeamOnly "1"





\\Master Servers\\



seta sv_master1 "master3.idsoftware.com"

seta sv_master2 "master0.gamespy.com"

seta sv_master3 "wolfmaster.idsoftware.com"

seta sv_master4 "clanservers.net"





\\Votes\\



set g_allowVote "1"

set vote_limit "6"

set vote_allow_comp "0"

set vote_allow_gametype "0"

set vote_allow_kick "0"

set vote_allow_map "1"

set vote_allow_matchreset "1"

set vote_allow_mutespecs "0"

set vote_allow_nextmap "1"

set vote_allow_pub "0"

set vote_allow_referee "0"

set vote_allow_shuffleteams "1"

set vote_allow_swapteams "0"

set vote_allow_friendlyfire "0"

set vote_allow_timelimit "1"

set vote_allow_warmupdamage "1"

set vote_allow_antilag "0"

set vote_allow_balancedteams "0"

set vote_allow_muting "1"

\\LOGGING\\

set g_log "etserver.log"
set logfile 2
set g_logsync 0

\\WATCHDOG\\
set com_watchdog_cmd "exec map.cfg"


\\Maprotation\\



exec map.cfg



And the corresponding map.cfg

Code: Select all
set d1 "campaign cmpgn_map; set nextcampaign vstr d1"
set d_initial "set g_gametype 4; map oasis; set nextcampaign vstr d1"
vstr d_initial


No i took
Code: Select all
./etded +set dedicated 2 +set sv_punkbuster 1 +exec server.cfg"

and it worked :-D some problems with the owner rights :-P

No i have to learn how to do it not with etmain but with noquarter or etpro.
Some questions for comprehension:

If i run ET as a User, for example et1, i need to make +set fs_homepath "/home/et1/.etwolf/", right? And +set fs_basepath is the folder in which i installed ET, so /usr/local/games/enemy-territory?

Google delivered not enough answers for all my questiosn :P Thnx a lot :!:

Edit:
Ammz wrote:It couldn't load the default cfg??

Ehm very wierd error.

This link may help you.

http://tjw.org/etded/


That link is awesome :-) Thank you!
Chrooting...well, the safety aspect is not to forget...
Image
Pls Foxxy, teach me how to "master-bait" :-P

PS Founder
User avatar
Posts: 2405
Joined: Wed Apr 26, 2006 0:00

Postby landser » Tue Dec 05, 2006 18:24

you mean setting the game mod like shrubet or etpub?

the command therefor is: +set fs_game etpub
you only needa put etpub folder there ... (in enemy-territory folder; where etmain and pb folder are)


i used this once to start a server:

./etded.x86 +set fs_homepath /home/xy/enemy-territory set fs_basepath /home/xy/enemy-territory +set fs_game etpub +set com _hunkmegs 92 +exec server.cfg +set sv_maxclients "40"


and the map.cfg ...

i would write in:

Code: Select all
set d1 "set g_gametype 2 ; map oasis ; set nextmap vstr d2"
set d2 "set g_gametype 2 ; map goldrush ; set nextmap vstr d3"
set d3 "set g_gametype 2 ; map fueldump ; set nextmap vstr d4"
set d4 "set g_gametype 2 ; map railgun ; set nextmap vstr d5"
set d5 "set g_gametype 2 ; map battery ; set nextmap vstr d6"
set d6 "set g_gametype 2 ; map radar ; set nextmap vstr d1" 
vstr d1



thats the same like you had, but it works 100% and easy to edit :D

Veteran
User avatar
Posts: 990
Joined: Mon Nov 13, 2006 1:00
Location: World -> Europe -> Germany -> Swabia

Postby Stormcrow » Tue Dec 05, 2006 18:55

Well, thnx, now i see clearer :-) I try that out after i have win the fight with the php-manual,concerning the shell-call via a php-script :roll:
Image
Pls Foxxy, teach me how to "master-bait" :-P

Server High Admin
User avatar
Posts: 1385
Joined: Sun Apr 30, 2006 0:00
Location: Poland

Postby RapidHail » Tue Dec 05, 2006 19:30

To execute shell-script via PHP try exec()
-=RapidHail=-: Do or do not... There is no try.
-|PS|- Server Monitor
eRepublik Citizen
Network Toolkit

Veteran
User avatar
Posts: 990
Joined: Mon Nov 13, 2006 1:00
Location: World -> Europe -> Germany -> Swabia

Postby Stormcrow » Tue Dec 05, 2006 20:00

I tried system() and shell_exec(), both functions are working, the problem is that the server then is starting as the user www-data :? the server seems to be running (the pid-file is generated), but i could no connect :-P

Now i had new insane idea, i am going to use ssh2_connect() to connect to the server als the user et1 and then i'll use ssh2_exec() to run the server :-P

But now i am hanging on the error


Code: Select all
Fatal error: Call to undefined function ssh2_connect() in /var/www/start2.php on line 2


libssh2 is installed, i dont have a clue at the moment :roll:

Edit: crap idea
Last edited by Stormcrow on Tue Dec 05, 2006 20:50, edited 1 time in total.
Image
Pls Foxxy, teach me how to "master-bait" :-P

Server High Admin
User avatar
Posts: 1385
Joined: Sun Apr 30, 2006 0:00
Location: Poland

Postby RapidHail » Tue Dec 05, 2006 20:05

You problably don't have php_ssh2 module loaded. System() and shell_exec() are thath king of functions which are waiting for output. Use exec() :-)
-=RapidHail=-: Do or do not... There is no try.
-|PS|- Server Monitor
eRepublik Citizen
Network Toolkit

Veteran
User avatar
Posts: 990
Joined: Mon Nov 13, 2006 1:00
Location: World -> Europe -> Germany -> Swabia

Postby Stormcrow » Tue Dec 05, 2006 20:52

It does work, the only problem is that the user which executes the command is the apache (www-data) and i want it to be the et1-user

next idea is do edit the sudoers and make a sudo -u et1...:desperate:
Image
Pls Foxxy, teach me how to "master-bait" :-P

Server High Admin
User avatar
Posts: 1385
Joined: Sun Apr 30, 2006 0:00
Location: Poland

Postby RapidHail » Tue Dec 05, 2006 21:00

Execute it through su/sudo or ssh user@password 'command' ;-)
-=RapidHail=-: Do or do not... There is no try.
-|PS|- Server Monitor
eRepublik Citizen
Network Toolkit

Veteran
User avatar
Posts: 990
Joined: Mon Nov 13, 2006 1:00
Location: World -> Europe -> Germany -> Swabia

Postby Stormcrow » Tue Dec 05, 2006 22:50

After several wiskey-cola, serveral man-pages im drunken but it works like i want it *gluks*
No i have to be patient untill Hetzner set my root-server up and then i could go on with all that stuff...thank you...no i go to PS1...hope my aiming is better than that afternoon.

So long
Image
Pls Foxxy, teach me how to "master-bait" :-P

Return to PS Forum Archives - 2006

Who is online

Users browsing this forum: No registered users and 31 guests