SHARE
TWEET

Untitled

a guest Jul 17th, 2017 42 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/sh
  2. #
  3. # Hopmod Game Server Control Script
  4. #
  5.  
  6. ################################################################################
  7.  
  8. # refuse root
  9. if [ "x${UID}" = "x0" ] || [ "x$(whoami)" = "xroot" ]
  10. then
  11.     echo "You cannot use the server as root!"
  12.     exit 1
  13. fi
  14.  
  15. ################################################################################
  16.  
  17. v_system=$(uname)
  18.  
  19. f_starter=$(basename $0)
  20. d_main=
  21.  
  22. if echo $v_system | grep -q "BSD"
  23. then
  24.     d_main=$(dirname $(cd $(dirname $0) ; pwd))
  25. else
  26.     d_main=$(dirname $(dirname $(readlink -f $0)))
  27. fi
  28.  
  29. cd $d_main
  30.  
  31. if [ ! -d bin ] || [ ! -d log ] || [ ! -d conf ] || [ ! -d script ]
  32. then
  33.     echo "Incomplete Installation! bin/, log/, conf/ or script/ are missing."
  34.     exit 1
  35. fi
  36.  
  37. ################################################################################
  38.  
  39. . bin/env.sh
  40.  
  41. v_remove_status_log=n
  42.  
  43. ################################################################################
  44.  
  45. p_exec() {
  46.  
  47.     if [ -p serverexec ]
  48.     then
  49.         echo "$1" > serverexec
  50.     else
  51.     return 1
  52.     fi
  53.    
  54.     return 0
  55. }
  56.  
  57. ################################################################################
  58.  
  59. p_start_server() {
  60.  
  61.     if [ -p serverexec ]
  62.     then
  63.     return 1
  64.     fi
  65.    
  66.     # enable core dump
  67.     ulimit -c unlimited
  68.    
  69.     # cleanup and intialization
  70.     rm -f log/status.log
  71.     touch log/status.log
  72.     touch log/error.log
  73.    
  74.     ERROR_START=
  75.     if echo $v_system | grep -q "BSD"
  76.     then
  77.     ERROR_START=$(stat -f %Sp log/error.log)
  78.     else
  79.     ERROR_START=$(stat -c %s log/error.log)
  80.     fi
  81.    
  82.     ERROR_START=$(( $ERROR_START + 1 ))
  83.    
  84.     # start the game server as a background process
  85.     nohup bin/monitor bin/sauer_server ${SERVER_OPTIONS} 1>log/status.log 2>>log/error.log </dev/null &
  86.    
  87.     # wait for server to start up and print the initial status messages
  88.     until $(cat log/status.log | grep -q *READY*)
  89.     do
  90.         #stop if server has terminated
  91.         jobs %- > /dev/null 2>&1
  92.         RUNNING=$?
  93.         if [ "$RUNNING" = "1" ]
  94.         then
  95.             break
  96.         fi
  97.     done
  98.    
  99.     tail -c +$ERROR_START log/error.log
  100.     cat log/status.log
  101.    
  102.     if [ "$v_remove_status_log" = "y" ]
  103.     then
  104.         rm log/status.log
  105.     fi
  106.    
  107.     return 0
  108. }
  109.  
  110. p_restart_server() {
  111.  
  112.     if ! p_exec restart
  113.     then
  114.     $d_main/bin/$f_starter start
  115.     fi
  116. }
  117.  
  118. p_stop_server() {
  119.  
  120.     if ! p_exec shutdown
  121.     then
  122.     return 1
  123.     fi
  124.    
  125.     return 0
  126. }
  127.  
  128. ################################################################################
  129.  
  130. p_status() {
  131.  
  132.     out=$(tty)
  133.    
  134.     if [ -n "$1" ]
  135.     then
  136.     out="$2"
  137.     fi
  138.    
  139.     if ! p_exec "write_server_status [$out]"
  140.     then
  141.     return 1
  142.     fi
  143.    
  144.     sleep 1
  145.     return 0
  146. }
  147.  
  148. p_update_conf() {
  149.  
  150.     if ! p_exec reloadscripts
  151.     then
  152.     return 1
  153.     fi
  154.    
  155.     return 0
  156. }
  157.  
  158. p_password() {
  159.  
  160.     if ! p_exec "admin_password $2"
  161.     then
  162.     return 1
  163.     fi
  164.    
  165.     return 0
  166. }
  167.  
  168. ################################################################################
  169.  
  170. p_open_shell() {
  171.  
  172.     if [ ! -p serverexec ]
  173.     then
  174.         return 1
  175.     fi
  176.    
  177.     msg="Press CTRL+C to quit."
  178.    
  179.     case "$1" in
  180.     'ruby')
  181.         echo $msg
  182.         exec bin/utils/shell.rb
  183.     ;;
  184.     'perl')
  185.         echo $msg
  186.         exec bin/utils/shell.pl
  187.     ;;
  188.     *)
  189.         if [ ! -e bin/utils/shell ]
  190.         then
  191.         return 2
  192.         else
  193.         exec bin/utils/shell
  194.         fi
  195.     ;;
  196.     esac
  197.    
  198.     return 0
  199. }
  200.  
  201. p_luapp() {
  202.  
  203.     exec bin/utils/luapp "$*"
  204. }
  205.  
  206. ################################################################################
  207.  
  208. p_msg_no_server() {
  209.  
  210.     echo "Server is not active."
  211.     exit 0
  212. }
  213.  
  214. ################################################################################
  215.  
  216. case "$1" in
  217.     'start')
  218.     case "$2" in
  219.         'luapp')
  220.         if [ "x$3" = "x" ]
  221.         then
  222.             echo "No file given."
  223.             echo "usage: $0 start luapp luafile"
  224.             exit 2
  225.         fi
  226.        
  227.         shift 2
  228.         p_luapp "$*"
  229.         ;;
  230.         'shell')
  231.         ret_val=$(p_open_shell "$3" ; echo $?)
  232.         if [ ! "$ret_val" = "0" ]
  233.         then
  234.             case "$ret_val" in
  235.             '1')
  236.                     p_msg_no_server
  237.             ;;
  238.             '2')
  239.                     echo "You must specify a shell: ruby or perl."
  240.                     exit 2
  241.             ;;
  242.             *)
  243.                     echo "Unexpected error."
  244.                     exit 3
  245.             ;;
  246.             esac
  247.         fi
  248.         ;;
  249.         *)
  250.         if [ "x$2" = "x--no-statuslog" ]
  251.                 then
  252.                     v_remove_status_log=y
  253.                 fi
  254.        
  255.         if [ ! -x bin/sauer_server ]
  256.         then
  257.             echo "Cannot find or execute bin/sauer_server"
  258.             exit 1
  259.         fi
  260.        
  261.         if [ ! -x bin/monitor ]
  262.         then
  263.             echo "Cannot find or execute bin/monitor"
  264.     #   exit 1
  265.         fi
  266.        
  267.         if ! p_start_server
  268.         then
  269.             echo "It appears the game server is already running."
  270.         fi
  271.         ;;
  272.     esac
  273.     ;;
  274.     'restart')
  275.     p_restart_server
  276.     ;;
  277.     'stop')
  278.         p_stop_server
  279.     ;;
  280.     'status')
  281.     if ! p_status "$2"
  282.     then
  283.         p_msg_no_server
  284.     fi
  285.     ;;
  286.     'updateconf')
  287.         if ! p_update_conf
  288.     then
  289.         p_msg_no_server
  290.     fi
  291.     ;;
  292.     'password')
  293.         if ! p_password "$2"
  294.     then
  295.         p_msg_no_server
  296.     fi
  297.     ;;
  298.     'help')
  299.     echo "usage: $0 [start] [--no-statuslog]"
  300.     echo "       $0 [start] luapp luafile"
  301.     echo "       $0 [start] shell [ruby|perl]"
  302.     echo ""
  303.     echo "       $0 stop"
  304.     echo ""
  305.     echo "       $0 restart"
  306.     echo ""
  307.     echo "       $0 status [output file]"
  308.     echo "       $0 updateconf"
  309.     echo "       $0 password 'new password'"
  310.     ;;
  311.     *)
  312.         exec $d_main/bin/$f_starter start $*
  313.     ;;
  314. esac
  315.  
  316. exit 0
RAW Paste Data
Top