Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: samsunix - 09.09.11 - klo:12.07
-
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 (http://www.minecraftwiki.net/wiki/Server_startup_script) 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
#!/bin/bash
sh /home/samsunix/minecraft/s2/runmc.sh
/home/samsunix/minecraft/s2/runmc.sh -scripti
#!/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ä?)
-
Auttaisiko tuohon ongelmanratkaisuun, jos ohjaat tulosteen tiedostoon? Eli esim. tuohon init.d-hakemiston skriptiin laitatkin näin:
#!/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
-
Auttaisiko tuohon ongelmanratkaisuun, jos ohjaat tulosteen tiedostoon? Eli esim. tuohon init.d-hakemiston skriptiin laitatkin näin:
#!/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ä.
-
Auttaisiko tuohon ongelmanratkaisuun, jos ohjaat tulosteen tiedostoon? Eli esim. tuohon init.d-hakemiston skriptiin laitatkin näin:
#!/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?
-
#!/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.
-
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.
-
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.
SERVICE='craftbukkit-dev.jar'
OPTIONS='noqui'
USERNAME='samsunix'
WORLD='maailma'
MCPATH='/home/samsunix/minecraft'
BACKUPPATH='/home/samsunix/minecraft/minecraft.backup'
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:
MC_SERVER_URL='http://dl.bukkit.org/latest-beta/craftbukkit.jar'