Forum Linux.pl

Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: kshishu w 2018-02-03, 15:50:52

Tytuł: [SOLVED] Problem z GREP + CUT - skrypt na automatyczne aktualizacje GRY STEAM
Wiadomość wysłana przez: kshishu w 2018-02-03, 15:50:52
Witam,

Mam problem z skryptem /etc/rc.d/init.d do automatycznej aktualizacji GRY STEAM ARK. Przerobiłem 3 skrypty w jeden ale coś nie działa poprawnie...
Problem jest w pliku latestavailableupdate.txt / linijce 36/39. Wydaje mi się, że skrypt źle kopiuje "buildid"...
Ręcznie jak próbuję zobaczyć buildid to wychodzi "buildid"               "2494794"  - a w pliku mam 2467222  latestavailableupdate.txt) czyli nie nadpisuje tego numeru a go zostawia...

Może mi ktoś pomóc? Sam nie jestem w stanie tego zobaczyć bo siedzę w innym programowaniu  - SourcePawn  (do gry CS:S). Tego nie ogarniam dlaczego nie działa.
Byłbym wdzięczny jakby ktoś sprawdził skrypt i go poprawił :).
HELP :)


#!/bin/bash
USERNAME='steam'
SERVICE='ShooterGameServ'
STEAMDIR=/XXX/steam
STEAMCMDDIR=/XXX/steam
SERVERDIR=/XXX/ark_se
RCONPASSWORD=profesionalnoobs
RCONIP=XXX.XXX.XXX.XXX
RCONPORT=XXXXX
RCONFILE=/XXX/steam/rcon/rcon
SCREEN=arkse
SERVERSTARTCOMMAND=$SERVERDIR"/ShooterGame/Binaries/Linux/ShooterGameServer \"Ragnarok?ServerAdminPassword=XXXXXXX?PreventDownloadSurvivors=true?PreventDownloadItems=true?RCONEnabled=True?RCONPort=XXXXX?ShowFloatingDamageText=true?PreventDownloadDinos=true?PreventUploadSurvivors=true?PreventUploadItems=true?PreventUploadDinos=true?MaxPlayers=50?listen? -game -server -log"

ark_update()
{
 touch $SERVERDIR/test.txt
 echo "16 line" > $SERVERDIR/test.txt
 if [ ! -f $SERVERDIR/latestinstalledupdate.txt ] ; then
  touch $SERVERDIR/latestinstalledupdate.txt
 echo "0" >> $SERVERDIR/latestinstalledupdate.txt
 fi
 if [ -f $SERVERDIR/updateinprogress.dat ] ; then
  if [ $(( (`date +%s` - `stat -L --format %Y $SERVERDIR/updateinprogress.dat`) > (60*60) )) -eq 1 ] ; then
  rm -f $SERVERDIR/updateinprogress.dat
  fi
 fi
 echo "26 line" >> $SERVERDIR/test.txt
 if [ ! -f $SERVERDIR/updateinprogress.dat ] ; then
  touch $SERVERDIR/updateinprogress.dat
  rm -fr $STEAMDIR/appcache
  $STEAMCMDDIR/steamcmd.sh +login anonymous +app_info_update 1 +app_info_print "376030" +quit | grep -EA 1000 "^\s+\"branches\"$" | grep -EA 5 "^\s+\"public\"$" | grep -m 1 -EB 10 "^\s+}$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d' ' -f3 > $SERVERDIR/latestavailableupdate.txt
  sleep 10
  LATESTUPDATE=`cat $SERVERDIR/latestavailableupdate.txt`
  INSTALLEDUPDATE=`cat $SERVERDIR/latestinstalledupdate.txt`
  echo "34 line" >> $SERVERDIR/test.txt
  if [ "$LATESTUPDATE" == "$INSTALLEDUPDATE" ] ; then
  rm -f $SERVERDIR/updateinprogress.dat
  fi
  if [ "$LATESTUPDATE" != "$INSTALLEDUPDATE" ] && [ "$LATESTUPDATE" != "" ] && [ "$INSTALLEDUPDATE" != "" ]
  then
  echo "37 line" >> $SERVERDIR/test.txt
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat New update available, server is restarting in 10 minutes!
  sleep 5m
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat New update available, server is restarting in 5 minutes!
  sleep 1m
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat New update available, server is restarting in 4 minutes!
  sleep 1m
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat New update available, server is restarting in 3 minutes!
  sleep 1m
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat New update available, server is restarting in 2 minutes!
  sleep 1m
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat New update available, server is restarting in 1 minute!
  sleep 1m
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT saveworld
  echo "51 line" >> $SERVERDIR/test.txt
  sleep 15
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT doexit
  sleep 15
  if [ -f $SERVERDIR/ShooterGame/Saved/SavedArks/Ragnarok.ark ] ; then
  COUNTER=0
  while [ $COUNTER -lt 5 ]; do
  if [ $(( (`date +%s` - `stat -L --format %Y $SERVERDIR/ShooterGame/Saved/SavedArks/Ragnarok.ark`) > (2*60) )) -eq 1 ] ; then
  COUNTER=5
  fi
  sleep 15
  done
  fi
  echo "64 line" >> $SERVERDIR/test.txt
  echo "$(date) Update - $(echo $INSTALLEDUPDATE) to $(echo $LATESTUPDATE)" >> $(echo $SERVERDIR)/Updatelog.txt
  $STEAMCMDDIR/steamcmd.sh +login anonymous +force_install_dir /opt/ark_se +app_update 376030 +quit
  $STEAMCMDDIR/steamcmd.sh +login anonymous +app_info_update 1 +app_info_print "376030" +app_info_print "376030" +quit | grep -EA 1000 "^\s+\"branches\"$" | grep -EA 5 "^\s+\"public\"$" | grep -m 1 -EB 10 "^\s+}$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d' ' -f3 > $SERVERDIR/latestinstalledupdate.txt
  sleep 5
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat Update downloaded!
  sleep 5
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat Server is restarting now!
  sleep 5
  echo "73 line" >> $SERVERDIR/test.txt
  screen -x -S arkse kill
  sleep 10
  echo "76 line" >> $SERVERDIR/test.txt
  screen -dmS arkse $SERVERSTARTCOMMAND
  echo "78 line" >> $SERVERDIR/test.txt
  rm -f $SERVERDIR/latestavailableupdate.txt
  rm -f $SERVERDIR/updateinprogress.dat
  echo "81 line" >> $SERVERDIR/test.txt
  fi
 fi
}

ark_start()
{
  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $SERVERDIR
    screen -dmS $SCREEN $SERVERSTARTCOMMAND
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $SERVICE!"
    fi
  fi
}
 
ark_stop()
{
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    screen -x -S $SCREEN kill
    echo "Stopping $SERVICE"
    sleep 7
  else
    echo "$SERVICE was not running."
  fi
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
}
 
ark_restart()
{
  sleep 5
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT serverchat Server restart in 15s.
  sleep 5
  $RCONFILE -P$RCONPASSWORD -a$RCONIP -p$RCONPORT admincheat destroywilddinos
  sleep 10
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    screen -x -S $SCREEN kill
    echo "Stopping $SERVICE"
    sleep 7
  else
    echo "$SERVICE was not running."
  fi
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
  sleep 15
  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $ARKPATH
    screen -dmS $SCREEN $SERVERSTARTCOMMAND
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $SERVICE!"
    fi
  fi
}

#Start-Stop here
case "$1" in
  start)
    ark_start
    ;;
  stop)
    ark_stop
    ;;
  restart)
    ark_restart
    ;;
  update)
    ark_update
    ;;
  status)
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;

  *)
  echo "Usage: $0 {start|stop|update|status|restart}"
  exit 0
  ;;
esac

exit 1
Tytuł: Odp: Problem z GREP + CUT - skrypt na automatyczne aktualizacje GRY STEAM
Wiadomość wysłana przez: 1709 w 2018-02-05, 19:24:56
1. Mozesz mi podać sens istnienia tego skryptu, jeśli gry się aktualizują zaraz po uruchomieniu Steam ?
Nie aktualizują się ? Steam nie uruchamia Ci się automatycznie na starcie systemu ?
2. Mozesz poprawić te XXX w skrypcie ? Bo to trochę denerwuje jakby ktoś to miał sprawdzać.
Potestuj z komendami i wybierz najlepszą
ls ~/
ls ${HOME}
pwd
3. Musisz zapisywać hasło ? Nie możesz zmusić, żeby Steam pamiętał za ciebie ?
4. Jak coś Ci nie dziala dodaj tymczasowo opcje debugowania
echo "$nazwa_zmiennej"

Możesz sobie nawet funkcje debug zrobić jak chcesz
przykład
#!/bin/bash


#------------------------{
# Początek fukcji
# Opcje debugowania = "on" / "off"
DEBUG1=on


function Func_DEBUG()
{
[ "$DEBUG1" == "on" ] && echo -e "${RC} $@ ${NC}"
}

RC='\e[0;31m' # Red Color
NC='\e[0m' # No Color
# Koniec funkcji
#------------------------}


ZMIENNA="45"
# Przykład jak zobaczyć zmienną w danej chwili
    Func_DEBUG "ZMIENNA = $ZMIENNA"
5. Mam nadzieje ze wiesz takze o istnieniu
bash -x ./nazwa_skryptu