Kirjoittaja Aihe: Ihan tavallinen käynnistys scripti Java (minecraft) ohjelmalle.  (Luettu 4741 kertaa)

samsunix

  • Käyttäjä
  • Viestejä: 203
    • Profiili
    • samuliweb
Olen tässä nyt parin päivän aikana yrittänyt googlettaa ja etsiä yksinkertaista scriptiä jolla saisin Minecraftin käynistymään bootin yhteydessä. Valmis scripti löyty kyllä minecraft wiki sivulta mutta se ei toimi jos palvelimia on useampi. Lisäksi scripti on todella todella pitkä ja monimutkainen (maalikon silmin). Itse haluaisin yksinkertaisen lyhyen scriptin jota voisin soveltaa myös muihin ohjelmiin.
Joko en vain osaa tai java on hankala ajaa muualta kuin ajettavan ohjelman juurikansiosta joten tein /etc/init.d/ kansioon scriptin joka ajaa scriptin kotikansiossani. Tämä ratkaisu toimii, mutta vain melkein.

/etc/init.d/minecraft2 -scripti
Koodia: [Valitse]
#!/bin/bash
sh /home/samsunix/minecraft/s2/runmc.sh

/home/samsunix/minecraft/s2/runmc.sh -scripti
Koodia: [Valitse]
#!/bin/sh
echo "Testi"
screen -S Minecraft2 java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui

Suorittamalla minecraft2 scriptin saan kyllä tulosteen "testi" mutta palvelin ei lähde päälle.
suorittamalla runmc.sh scriptin saan tulosteen "testi" ja palvelin lähtee päälle? Mutta, missä menee vikaan?

(villi veikkaus on ettei minecraft anna itseään suoritettavan rootina -> mitä pitää lisätä scriptiin että, ohjelma suoritetaan käyttäjänä?)
« Viimeksi muokattu: 09.09.11 - klo:12.14 kirjoittanut samsunix »

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11433
    • Profiili
    • Tomin kotisivut
Auttaisiko tuohon ongelmanratkaisuun, jos ohjaat tulosteen tiedostoon? Eli esim. tuohon init.d-hakemiston skriptiin laitatkin näin:
Koodia: [Valitse]
#!/bin/bash
sh /home/samsunix/minecraft/s2/runmc.sh > /var/log/minecraft2.log
En ole testannut toimiiko tuo tuolla, mutta en nyt äkkiseltään keksi miksi ei toimisi.

Muuten en tiedä onko init.d-hakemisto ihan oikea paikka tuolle (jos laittaa vastaavan rivin &-merkin kanssa /etc/rc.conf:iin). Varmaankin muistit antaa molemmille tiedostoille suoritusoikeudet (+x) eli chmod +x tiedosto
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

samsunix

  • Käyttäjä
  • Viestejä: 203
    • Profiili
    • samuliweb
Auttaisiko tuohon ongelmanratkaisuun, jos ohjaat tulosteen tiedostoon? Eli esim. tuohon init.d-hakemiston skriptiin laitatkin näin:
Koodia: [Valitse]
#!/bin/bash
sh /home/samsunix/minecraft/s2/runmc.sh > /var/log/minecraft2.log

Ei toimi

Muuten en tiedä onko init.d-hakemisto ihan oikea paikka tuolle (jos laittaa vastaavan rivin &-merkin kanssa /etc/rc.conf:iin). Varmaankin muistit antaa molemmille tiedostoille suoritusoikeudet (+x) eli chmod +x tiedosto

Yritin toimia ton minecraft scripti ohjeen opastamana. Yksi vaihtoehto olisi muokata tuota minecraft scriptiä.

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11433
    • Profiili
    • Tomin kotisivut
Auttaisiko tuohon ongelmanratkaisuun, jos ohjaat tulosteen tiedostoon? Eli esim. tuohon init.d-hakemiston skriptiin laitatkin näin:
Koodia: [Valitse]
#!/bin/bash
sh /home/samsunix/minecraft/s2/runmc.sh > /var/log/minecraft2.log

Ei toimi
Eli tiedostoon /var/log/minecraft2.log ei tulostu mitään?
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

samsunix

  • Käyttäjä
  • Viestejä: 203
    • Profiili
    • samuliweb
Koodia: [Valitse]
#!/bin/bash
# /etc/init.d/minecraft
# version 0.4.1 2013-01-16

### BEGIN INIT INFO
# Provides:   minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop:  $local_fs $remote_fs
# Should-Start:   $network
# Should-Stop:    $network
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description:    Minecraft server
# Description:    Starts the minecraft server
### END INIT INFO

#Settings
SERVICE='craftbukkit-dev.jar'
OPTIONS='noqui'
USERNAME='samsunix'
WORLD='maailma'
MCPATH='/home/samsunix/minecraft'
BACKUPPATH='/home/samsunix/minecraft/minecraft.backup'
MC_SERVER_URL='http://dl.bukkit.org/latest-beta/craftbukkit.jar'
MAXHEAP=61440
MINHEAP=32
HISTORY=512
CPU_COUNT=2
INVOCATION="java -d64 -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
-XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
-jar $SERVICE $OPTIONS"

ME=`whoami`
as_user() {
  if [ $ME == $USERNAME ] ; then
    bash -c "$1"
  else
    su - $USERNAME -c "$1"
  fi
}

mc_start() {
  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $MCPATH
    as_user "cd $MCPATH && screen -h $HISTORY -dmS minecraft $INVOCATION"
    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
}

mc_saveoff() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running... suspending saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sync
    sleep 10
  else
    echo "$SERVICE is not running. Not suspending saves."
  fi
}

mc_saveon() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running... re-enabling saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  else
    echo "$SERVICE is not running. Not resuming saves."
  fi
}

mc_stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 10MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 9MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 8MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 7MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 6MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 5MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 4MIN KULUTTUA.\"\015'"   
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 3MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 2MIN KULUTTUA.\"\015'"
    sleep 60
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 1MIN KULUTTUA.\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 50SEC KULUTTUA.\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 40SEC KULUTTUA.\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 30SEC KULUTTUA.\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 20SEC KULUTTUA.\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"broadcast HUOLTOKATKO! PALVELIN SULJETAAN 10SEC KULUTTUA.\"\015'"
    sleep 5
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say 5...\"\015'"
    sleep 1
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say 4...\"\015'"
    sleep 1
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say 3...\"\015'"
    sleep 1
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say 2...\"\015'"
    sleep 1
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say 1...\"\015'"
    sleep 1
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say PALVELIN SULJETAAN!\"\015'"
    sleep 3
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"kickall Palvelin aukeaa jälleen noin 5min kuluttua\"\015'"
    sleep 1
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"lb rb world maailma player tnt since 11h\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"lb rb world maailma player fire since 11h\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"lb rb world maailma player creeper since 11h\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sleep 15
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
    sleep 45
  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
}

mc_update() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running! Will not start update."
  else
    as_user "cd $MCPATH && wget -O $MCPATH/$SERVICE.update $MC_SERVER_URL"
    if [ -f $MCPATH/$SERVICE.update ]
    then
      as_user "mv $MCPATH/$SERVICE.update $MCPATH/$SERVICE"
      echo "Minecraft successfully updated."
    else
      echo "Minecraft update could not be downloaded."
    fi
  fi
}

mc_backup() {
   mc_saveoff

   NOW=`date "+%Y-%m-%d_%Hh%M"`
   BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
   echo "Backing up minecraft world..."
   #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
   as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"

   echo "Backing up $SERVICE"
   as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
   #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""

   mc_saveon

   echo "Compressing backup..."
   as_user "gzip -f \"$BACKUP_FILE\""
   echo "Done."
}

mc_command() {
  command="$1";
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
    echo "$SERVICE is running... executing command"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
    sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
    # print output
    tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
  fi
}

#Start-Stop here
case "$1" in
  start)
    mc_start
    ;;
  stop)
    mc_stop
    ;;
  restart)
    mc_stop
    mc_start
    ;;
  update)
    mc_stop
    mc_update
    mc_start
;;
  backup)
    mc_backup
    ;;
  status)
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;
  command)
    if [ $# -gt 1 ]; then
      shift
      mc_command "$*"
    else
      echo "Must specify server command (try 'help'?)"
    fi
    ;;

  *)
  echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
  exit 1
  ;;
esac

exit 0


Aikalailla kaiken kattava käynistys scripti.

karvanoppa

  • Käyttäjä
  • Viestejä: 51
    • Profiili
Näyttää ihan pätevältä scriptiltä. Toimiiko toi päivitys? Meinaan lataa -beta.jar tiedoston mutta käyninistys tiedosto on -dev.jar tiedosta?

Täytyy itsekkin koittaaa tuota.

samsunix

  • Käyttäjä
  • Viestejä: 203
    • Profiili
    • samuliweb
Näyttää ihan pätevältä scriptiltä. Toimiiko toi päivitys? Meinaan lataa -beta.jar tiedoston mutta käyninistys tiedosto on -dev.jar tiedosta?

Täytyy itsekkin koittaaa tuota.
Koodia: [Valitse]
SERVICE='craftbukkit-dev.jar'
OPTIONS='noqui'
USERNAME='samsunix'
WORLD='maailma'
MCPATH='/home/samsunix/minecraft'
BACKUPPATH='/home/samsunix/minecraft/minecraft.backup'

Koodia: [Valitse]
as_user "mv $MCPATH/$SERVICE.update $MCPATH/$SERVICE"
Se siirtää ja nimeää sen samalla "$SERVICE" nimelle. Oli tarkoitus vielä lisätä tuohon vaihtoehdot että ladataanko beta vai dev versio, mutta se sitten jäi koske se on aika helppo vaihtaa tuossa alkusetapissa:

Koodia: [Valitse]
MC_SERVER_URL='http://dl.bukkit.org/latest-beta/craftbukkit.jar'