Advertisement
Guest User

Untitled

a guest
Feb 15th, 2017
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.63 KB | None | 0 0
  1. #!/bin/bash
  2. apt update
  3.  
  4. # javaの準備
  5. apt install default-jre unzip -y
  6.  
  7. # サーバー本体を用意
  8. wget https://hogefuga.com/minecraft/minecraft.zip -O /root/minecraft.zip
  9. unzip /root/minecraft.zip -d /root
  10.  
  11. # ramdiskの準備
  12. mkdir /mnt/ramdisk
  13. chmod 775 /mnt/ramdisk
  14. chown ${USER} /mnt/ramdisk
  15. mount -t tmpfs -o size=1g tmpfs /mnt/ramdisk
  16.  
  17. # 鍵を用意
  18. mkdir -p /root/.ssh
  19. chmod 600 /root/.ssh
  20.  
  21. #取得用秘密鍵
  22. echo "-----BEGIN RSA PRIVATE KEY-----
  23. hoge
  24. -----END RSA PRIVATE KEY-----" > /root/.ssh/id_rsa_for_restore
  25.  
  26. #更新用秘密鍵
  27. echo "-----BEGIN RSA PRIVATE KEY-----
  28. fuga
  29. -----END RSA PRIVATE KEY-----" > /root/.ssh/id_rsa_for_backup
  30.  
  31. chmod 600 /root/.ssh/id*
  32.  
  33. # 最新のワールドを取得
  34. rsync -azvv -e 'ssh -i /root/.ssh/id_rsa_for_restore -o "StrictHostKeyChecking no"' minesync@hogefuga.com:/home/minesync/save-201702 /mnt/ramdisk
  35.  
  36. # Ramdiskをリンク
  37. ln -s /mnt/ramdisk/save-201702 /root/minecraft/save
  38.  
  39. # 定期バックアップ設定
  40. cat <<EOS > /root/minecraft/save.sh
  41. service minecraft command save-all
  42. sleep 10s
  43. rsync -azvv -e 'ssh -i /root/.ssh/id_rsa_for_backup -o "StrictHostKeyChecking no"' /mnt/ramdisk/save-201702 minesync@hogefuga.com:/home/minesync
  44. EOS
  45. chmod +x /root/minecraft/save.sh
  46. (crontab -l 2>/dev/null; echo "*/5 * * * * /root/minecraft/save.sh > /dev/null 2>&1") | crontab -
  47.  
  48. # 起動
  49.  
  50. cat <<'EOF' > /etc/init.d/minecraft
  51. #!/bin/bash
  52. # /etc/init.d/minecraft
  53. # version 0.4.2 2016-02-09 (YYYY-MM-DD)
  54. #
  55. ### BEGIN INIT INFO
  56. # Provides:   minecraft
  57. # Required-Start: $local_fs $remote_fs screen-cleanup
  58. # Required-Stop:  $local_fs $remote_fs
  59. # Should-Start:   $network
  60. # Should-Stop:    $network
  61. # Default-Start:  2 3 4 5
  62. # Default-Stop:   0 1 6
  63. # Short-Description:    Minecraft server
  64. # Description:    Starts the minecraft server
  65. ### END INIT INFO
  66.  
  67. #Settings
  68. SERVICE='forge-1.7.10-10.13.4.1566-1.7.10-universal.jar'
  69. SCREENNAME='minecraft_server'
  70. OPTIONS='nogui'
  71. USERNAME='root'
  72. WORLD='save'
  73. MCPATH='/root/minecraft'
  74. BACKUPPATH='/media/remote.share/minecraft.backup'
  75. MAXHEAP=7
  76. MINHEAP=6
  77. HISTORY=1024
  78. CPU_COUNT=2
  79. INVOCATION="java -Xmx${MAXHEAP}G -Xms${MINHEAP}G -XX:+UseConcMarkSweepGC \
  80. -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
  81. -jar $SERVICE $OPTIONS"
  82.  
  83. ME=`whoami`
  84. as_user() {
  85.   if [ "$ME" = "$USERNAME" ] ; then
  86.     bash -c "$1"
  87.   else
  88.     su - "$USERNAME" -c "$1"
  89.   fi
  90. }
  91.  
  92. mc_start() {
  93.   if  pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  94.     echo "$SERVICE is already running!"
  95.   else
  96.     echo "Starting $SERVICE..."
  97.     cd $MCPATH
  98.     as_user "cd $MCPATH && screen -h $HISTORY -dmS ${SCREENNAME} $INVOCATION"
  99.     sleep 7
  100.     if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  101.       echo "$SERVICE is now running."
  102.     else
  103.       echo "Error! Could not start $SERVICE!"
  104.     fi
  105.   fi
  106. }
  107.  
  108. mc_saveoff() {
  109.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  110.     echo "$SERVICE is running... suspending saves"
  111.    as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  112.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-off\"\015'"
  113.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-all\"\015'"
  114.     sync
  115.     sleep 10
  116.   else
  117.     echo "$SERVICE is not running. Not suspending saves."
  118.   fi
  119. }
  120.  
  121. mc_saveon() {
  122.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  123.     echo "$SERVICE is running... re-enabling saves"
  124.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-on\"\015'"
  125.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  126.   else
  127.     echo "$SERVICE is not running. Not resuming saves."
  128.   fi
  129. }
  130.  
  131. mc_stop() {
  132.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  133.     echo "Stopping $SERVICE"
  134.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  135.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-all\"\015'"
  136.     sleep 10
  137.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"stop\"\015'"
  138.     sleep 7
  139.   else
  140.     echo "$SERVICE was not running."
  141.   fi
  142.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  143.     echo "Error! $SERVICE could not be stopped."
  144.   else
  145.     echo "$SERVICE is stopped."
  146.   fi
  147. }
  148.  
  149. mc_update() {
  150.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  151.     echo "$SERVICE is running! Will not start update."
  152.   else
  153.     as_user "cd $MCPATH && wget -q -O $MCPATH/versions --no-check-certificate https://launchermeta.mojang.com/mc/game/version_manifest.json"
  154.     if [ "$1" == "snapshot" ] ; then
  155.       JSONVERSION=`cd $MCPATH && cat versions | python -c "exec(\"import json,sys\nobj=json.load(sys.stdin)\nversion=obj['latest']['snapshot']\nfor v in obj['versions']:\n   if v['id']==version:\n    print(v['url'])\")"`
  156.     else
  157.       JSONVERSION=`cd $MCPATH && cat versions | python -c "exec(\"import json,sys\nobj=json.load(sys.stdin)\nversion=obj['latest']['release']\nfor v in obj['versions']:\n   if v['id']==version:\n    print(v['url'])\")"`
  158.     fi
  159.     as_user "cd $MCPATH && wget -q -O $MCPATH/versions --no-check-certificate $JSONVERSION"
  160.     MC_SERVER_URL=`cd $MCPATH && cat versions | python -c 'import json,sys;obj=json.load(sys.stdin);print(obj["downloads"]["server"]["url"])'`
  161.     as_user "rm $MCPATH/versions"
  162.     as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update --no-check-certificate $MC_SERVER_URL"
  163.     if [ -f $MCPATH/minecraft_server.jar.update ] ; then
  164.       if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null` ; then
  165.         echo "You are already running the latest version of $SERVICE."
  166.       else
  167.         as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
  168.         echo "Minecraft successfully updated."
  169.       fi
  170.     else
  171.       echo "Minecraft update could not be downloaded."
  172.     fi
  173.   fi
  174. }
  175.  
  176. mc_backup() {
  177.    mc_saveoff
  178.    
  179.    NOW=`date "+%Y-%m-%d_%Hh%M"`
  180.    BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  181.    echo "Backing up minecraft world..."
  182.    #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  183.    as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"
  184.  
  185.    echo "Backing up $SERVICE"
  186.    as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  187.    #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
  188.  
  189.    mc_saveon
  190.  
  191.    echo "Compressing backup..."
  192.    as_user "gzip -f \"$BACKUP_FILE\""
  193.    echo "Done."
  194. }
  195.  
  196. mc_command() {
  197.   command="$1";
  198.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  199.     pre_log_len=`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`
  200.     echo "$SERVICE is running... executing command"
  201.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"$command\"\015'"
  202.     sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  203.     # print output
  204.     tail -n $((`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`-$pre_log_len)) "$MCPATH/logs/latest.log"
  205.   fi
  206. }
  207.  
  208. #Start-Stop here
  209. case "$1" in
  210.   start)
  211.     mc_start
  212.     ;;
  213.   stop)
  214.     mc_stop
  215.     ;;
  216.   restart)
  217.     mc_stop
  218.     mc_start
  219.     ;;
  220.   status)
  221.     if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  222.       echo "$SERVICE is running."
  223.     else
  224.       echo "$SERVICE is not running."
  225.     fi
  226.     ;;
  227.   command)
  228.     if [ $# -gt 1 ] ; then
  229.       shift
  230.       mc_command "$*"
  231.     else
  232.       echo "Must specify server command (try 'help'?)"
  233.     fi
  234.     ;;
  235.  
  236.   *)
  237.   echo "Usage: $0 {start|stop|status|restart|command \"server command\"}"
  238.   exit 1
  239.   ;;
  240. esac
  241.  
  242. exit 0
  243. EOF
  244. chmod a+x /etc/init.d/minecraft
  245. update-rc.d minecraft defaults
  246. service minecraft start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement