Advertisement
masa-

mc_common_functions.sh (2018-10-13)

Jun 6th, 2020
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 31.95 KB | None | 0 0
  1. #!/bin/bash
  2. # Initial version from Minecraft wiki
  3. # Heavily modified, customized and expanded by masa
  4. # version x.x.x 2018-10-13 (YYYY-MM-DD)
  5.  
  6. export LANG=en_US.UTF-8
  7. export LC_ALL=en_US.UTF-8
  8.  
  9. as_user() {
  10.     ME=`whoami`
  11.  
  12.     if [ ${ME} == ${USERNAME} ] ; then
  13.         bash -c "${1}"
  14.     else
  15.         su - ${USERNAME} -c "${1}"
  16.     fi
  17. }
  18.  
  19.  
  20. mc_start() {
  21.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  22.     L_PREFIX="${L_TIMESTAMP}"
  23.  
  24.     # Check that the server is not already running
  25.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  26.     then
  27.         echo "${L_PREFIX} [WARNING] mc_start(): ${SERVICE} is already running" | tee -a ${EVENT_LOG_FILE}
  28.     else
  29.         echo "${L_PREFIX} [INFO] mc_start(): Starting ${SERVICE}..." | tee -a ${EVENT_LOG_FILE}
  30.  
  31.         if [ "${USE_TEMP_LOCATION}" = "true" ]
  32.         then
  33.             # Copy the save files rom the actual game directory to the run-time location inside /tmp
  34.             copy_save_files_from_game_dir_to_tmp
  35.             local RET=$?
  36.  
  37.             if [ $RET -ne 0 ]; then
  38.                 echo "${L_TIMESTAMP} [ERROR] mc_start(): Failed to copy over the save files!" | tee -a ${EVENT_LOG_FILE}
  39.                 exit 1
  40.             fi
  41.         fi
  42.  
  43.         # Start the server process
  44.         as_user "cd ${INSTANCE_PATH} && screen -dmS ${SCREEN_SESSION} ${INVOCATION}"
  45.         sleep ${POST_START_DELAY}
  46.  
  47.         # Verify that the server process was started successfully, by checking a few times in a delayed loop
  48.         COUNTER=0
  49.  
  50.         while [ $COUNTER -lt ${START_GRACE_DELAY} ]
  51.         do
  52.             if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  53.             then
  54.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  55.                 L_PREFIX="${L_TIMESTAMP}"
  56.  
  57.                 echo "${L_PREFIX} [INFO] mc_start(): ${SERVICE} is now running" | tee -a ${EVENT_LOG_FILE}
  58.  
  59.                 # Create the state file to indicate that the server is/should be running
  60.                 as_user "touch ${STATE_FILE}"
  61.  
  62.                 # Disable automatic saving?
  63.                 if [ ${START_TO_DISABLE_AUTOSAVE_DELAY} -ge 0 ]
  64.                 then
  65.                     sleep ${START_TO_DISABLE_AUTOSAVE_DELAY}
  66.                     mc_saveoff
  67.                 fi
  68.  
  69.                 break
  70.             fi
  71.  
  72.             sleep 1
  73.  
  74.             ((COUNTER += 1))
  75.         done
  76.  
  77.         # If the loop counter hit the max value, the process was not started successfully
  78.         if [ ${COUNTER} -ge ${START_GRACE_DELAY} ]
  79.         then
  80.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  81.             L_PREFIX="${L_TIMESTAMP}"
  82.  
  83.             echo "${L_PREFIX} [ERROR] mc_start(): Could not start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  84.         fi
  85.     fi
  86. }
  87.  
  88.  
  89. mc_stop() {
  90.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  91.     L_PREFIX="${L_TIMESTAMP}"
  92.  
  93.     # Check that the process is running
  94.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  95.     then
  96.         echo "${L_PREFIX} [INFO] mc_stop(): Stopping ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  97.  
  98.         if [ ${SAVEALL_STOP_INTERVAL} -ge 0 ]; then
  99.             if [ "${1}" = "broadcast" ]; then
  100.                 as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dSERVER SHUTTING DOWN NOW. Saving the map...\"\015'"
  101.             fi
  102.  
  103.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"save-all\"\015'"
  104.             sleep ${SAVEALL_STOP_INTERVAL}
  105.         else
  106.             if [ "${1}" = "broadcast" ]; then
  107.                 as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dSERVER SHUTTING DOWN NOW!!\"\015'"
  108.                 sleep 3
  109.             fi
  110.         fi
  111.  
  112.         as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"stop\"\015'"
  113.         sleep ${POST_STOP_DELAY}
  114.  
  115.         # Check if the process was successfully stopped
  116.         COUNTER=0
  117.         while [ ${COUNTER} -lt ${STOP_GRACE_DELAY} ]; do
  118.  
  119.             if ! pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  120.             then
  121.                 # Remove the state file to indicate that the server has been stopped gracefully
  122.                 as_user "rm ${STATE_FILE} > /dev/null 2>&1"
  123.  
  124.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  125.                 L_PREFIX="${L_TIMESTAMP}"
  126.                 echo "${L_PREFIX} [INFO] mc_stop(): ${SERVICE} has been stopped" | tee -a ${EVENT_LOG_FILE}
  127.  
  128.                 if [ "${USE_TEMP_LOCATION}" = "true" ]
  129.                 then
  130.                     # Copy the save files from the temp directory (in RAM) into the actual server directory
  131.                     copy_save_files_from_tmp_to_game_dir
  132.                     local RET=$?
  133.  
  134.                     # If copying the save file succeeded, and this is not a restart, then remove the temp files
  135.                     if [ $RET -eq 0 ] && [ "$1" != "true" ]
  136.                     then
  137.                         remove_save_files_from_tmp_location
  138.                     fi
  139.                 fi
  140.  
  141.                 break
  142.             fi
  143.  
  144.             sleep 1
  145.  
  146.             ((COUNTER += 1))
  147.         done
  148.  
  149.         if [ ${COUNTER} -ge ${STOP_GRACE_DELAY} ]
  150.         then
  151.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  152.             L_PREFIX="${L_TIMESTAMP}"
  153.  
  154.             echo "${L_PREFIX} [ERROR] mc_stop(): ${SERVICE} could not be stopped" | tee -a ${EVENT_LOG_FILE}
  155.         fi
  156.     else
  157.         echo "${L_PREFIX} [WARNING] mc_stop(): ${SERVICE} was not running" | tee -a ${EVENT_LOG_FILE}
  158.     fi
  159. }
  160.  
  161.  
  162. mc_restart() {
  163.     # Use the arguments as override delay values, if they exist
  164.     if [ -n "${1}" ]
  165.     then
  166.         RESTART_FIRST_WARNING=${1}
  167.  
  168.         if [ -n "${2}" ]
  169.         then
  170.             RESTART_LAST_WARNING=${2}
  171.         fi
  172.     fi
  173.  
  174.     # Check if the server process is running, and broadcast warning messages before stopping the server
  175.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  176.     then
  177.         if [ ${RESTART_FIRST_WARNING} -gt ${RESTART_LAST_WARNING} ]
  178.         then
  179.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dSERVER RESTARTING IN ${RESTART_FIRST_WARNING} SECONDS\"\015'"
  180.             ((DELAY = ${RESTART_FIRST_WARNING} - ${RESTART_LAST_WARNING}))
  181.             sleep ${DELAY}
  182.         fi
  183.  
  184.         as_user "screen -p 0 -S $SCREEN_SESSION -X eval 'stuff \"say §dSERVER RESTARTING IN ${RESTART_LAST_WARNING} SECONDS\"\015'"
  185.         sleep ${RESTART_LAST_WARNING}
  186.  
  187.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  188.         L_PREFIX="${L_TIMESTAMP}"
  189.         echo "${L_PREFIX} [INFO] mc_restart(): Stopping ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  190.  
  191.         mc_stop "true"
  192.  
  193.         if ! pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  194.         then
  195.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  196.             L_PREFIX="${L_TIMESTAMP}"
  197.             echo "${L_PREFIX} [INFO] mc_restart(): ${SERVICE} has been stopped" | tee -a ${EVENT_LOG_FILE}
  198.         fi
  199.     fi
  200.  
  201.     # (Re-)Start the server
  202.     if ! pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  203.     then
  204.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  205.         L_PREFIX="${L_TIMESTAMP}"
  206.         echo "${L_PREFIX} [INFO] mc_restart(): (Re-)starting ${SERVICE}..." | tee -a ${EVENT_LOG_FILE}
  207.  
  208.         mc_start
  209.  
  210.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  211.         L_PREFIX="${L_TIMESTAMP}"
  212.  
  213.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  214.         then
  215.             echo "${L_PREFIX} [INFO] mc_restart(): ${SERVICE} is now running" | tee -a ${EVENT_LOG_FILE}
  216.         else
  217.             echo "${L_PREFIX} [ERROR] mc_restart(): Could not start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  218.         fi
  219.  
  220.     else
  221.         echo "${L_PREFIX} [ERROR] mc_restart(): ${SERVICE} could not be stopped" | tee -a ${EVENT_LOG_FILE}
  222.     fi
  223. }
  224.  
  225.  
  226. mc_restart_if_up() {
  227.     # Use the arguments as override delay values, if they exist
  228.     if [ -n "${1}" ]
  229.     then
  230.         RESTART_FIRST_WARNING=${1}
  231.  
  232.         if [ -n "${2}" ]
  233.         then
  234.             RESTART_LAST_WARNING=${2}
  235.         fi
  236.     fi
  237.  
  238.     # First check if the server is supposed to be running
  239.     if [ -f "${STATE_FILE}" ]
  240.     then
  241.         # Check if the server process is running, and broadcast warning messages before stopping the server
  242.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  243.         then
  244.             if [ ${RESTART_FIRST_WARNING} -gt ${RESTART_LAST_WARNING} ]
  245.             then
  246.                 as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dSERVER RESTARTING IN ${RESTART_FIRST_WARNING} SECONDS\"\015'"
  247.                 ((DELAY = ${RESTART_FIRST_WARNING} - ${RESTART_LAST_WARNING}))
  248.                 sleep ${DELAY}
  249.             fi
  250.  
  251.             as_user "screen -p 0 -S $SCREEN_SESSION -X eval 'stuff \"say §dSERVER RESTARTING IN ${RESTART_LAST_WARNING} SECONDS\"\015'"
  252.             sleep ${RESTART_LAST_WARNING}
  253.  
  254.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  255.             L_PREFIX="${L_TIMESTAMP}"
  256.             echo "${L_PREFIX} [INFO] mc_restart_if_up(): Stopping ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  257.  
  258.             mc_stop "true"
  259.         fi
  260.  
  261.         # The server was running and was successfully stopped, or at least is supposed to be running. Now we start it up again.
  262.         if ! pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  263.         then
  264.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  265.             L_PREFIX="${L_TIMESTAMP}"
  266.  
  267.             echo "${L_PREFIX} [INFO] mc_restart_if_up(): ${SERVICE} has been stopped" | tee -a ${EVENT_LOG_FILE}
  268.             echo "${L_PREFIX} [INFO] mc_restart_if_up(): Restarting ${SERVICE}..." | tee -a ${EVENT_LOG_FILE}
  269.  
  270.             mc_start
  271.  
  272.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  273.             L_PREFIX="${L_TIMESTAMP}"
  274.  
  275.             if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  276.             then
  277.                 echo "${L_PREFIX} [INFO] mc_restart_if_up(): ${SERVICE} is now running" | tee -a ${EVENT_LOG_FILE}
  278.             else
  279.                 echo "${L_PREFIX} [ERROR] mc_restart_if_up(): Could not start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  280.             fi
  281.  
  282.         else
  283.             echo "${L_PREFIX} [ERROR] mc_restart_if_up(): ${SERVICE} could not be stopped" | tee -a ${EVENT_LOG_FILE}
  284.         fi
  285. #   else
  286. #       L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  287. #       L_PREFIX="${L_TIMESTAMP}"
  288. #       echo "${L_PREFIX} [WARNING] mc_restart_if_up(): ${SERVICE} was not running" | tee -a ${EVENT_LOG_FILE}
  289.     fi
  290. }
  291.  
  292.  
  293. mc_saveoff() {
  294.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  295.     then
  296.         if [ "${1}" = "broadcast" ];
  297.         then
  298.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dServer going read-only...\"\015'"
  299.         fi
  300.  
  301.         as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"save-off\"\015'"
  302.     fi
  303. }
  304.  
  305.  
  306. mc_saveon() {
  307.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  308.     then
  309.         if [ "${1}" = "broadcast" ];
  310.         then
  311.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dServer going read-write...\"\015'"
  312.         fi
  313.  
  314.         as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"save-on\"\015'"
  315.     fi
  316. }
  317.  
  318.  
  319. mc_saveall() {
  320.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  321.     then
  322.         if [ "${1}" = "broadcast" ];
  323.         then
  324.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say §dSaving the map...\"\015'"
  325.         fi
  326.  
  327.         as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"save-all\"\015'"
  328.         sleep ${POST_SAVEALL_DELAY}
  329.     fi
  330. }
  331.  
  332.  
  333. mc_sync() {
  334.     if [ "${USE_TEMP_LOCATION}" = "true" ]; then
  335.         # Check if the server process is running
  336.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  337.         then
  338.             mc_say "§dSyncing world data to disk, server going read-only"
  339.             mc_saveoff
  340.  
  341.             if [ ${SAVEALL_BACKUP_INTERVAL} -ge 0 ]; then
  342.                 mc_saveall
  343.                 sleep ${SAVEALL_BACKUP_INTERVAL}
  344.             else
  345.                 sleep 2
  346.             fi
  347.  
  348.             # Copy the save files from the temp directory (in RAM) into the actual server directory
  349.             copy_save_files_from_tmp_to_game_dir
  350.  
  351.             mc_say "§dSyncing world data to disk finished, server going read-write"
  352.             mc_saveon
  353.         # Server not running, but the temp path exists
  354.         elif [ -e "${WORLD_PATH_TMP}" ]; then
  355.             # Copy the save files from the temp directory (in RAM) into the actual server directory
  356.             copy_save_files_from_tmp_to_game_dir
  357.         fi
  358.     fi
  359. }
  360.  
  361.  
  362. copy_save_files_from_game_dir_to_tmp() {
  363.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  364.  
  365.     if [ -z "${WORLD_PATH_TMP}" ] || [ -z "${WORLD_PATH_REAL}" ] || [ -z "${WORLD_PATH_SYMLINK}" ]
  366.     then
  367.         echo "Empty real or temp world path, or world path symlink name!"
  368.         exit 1
  369.     fi
  370.  
  371.     # Make the necessary temporary directories
  372.     if [ ! -d "${WORLD_PATH_TMP}" ]
  373.     then
  374.         echo "${L_TIMESTAMP} [INFO] copy_save_files_from_game_dir_to_tmp(): Creating the temporary save directory '${WORLD_PATH_TMP}'" | tee -a ${EVENT_LOG_FILE}
  375.         as_user "mkdir -p ${WORLD_PATH_TMP} > /dev/null 2>&1"
  376.         as_user "chmod 1777 ${WORLD_PATH_TMP}"
  377.     fi
  378.  
  379.     # The symlink does not point to the temp directory
  380.     # (which means that it likely points to the real directory on disk, see remove_save_files_from_tmp_location())
  381.     if [ -h "${WORLD_PATH_SYMLINK}" ] && [ `readlink -f ${WORLD_PATH_SYMLINK}` != "${WORLD_PATH_TMP}" ]
  382.     then
  383.         as_user "rm ${WORLD_PATH_SYMLINK} > /dev/null 2>&1"
  384.     fi
  385.  
  386.     # No symlink present
  387.     if [ ! -e "${WORLD_PATH_SYMLINK}" ]
  388.     then
  389.         echo "${L_TIMESTAMP} [INFO] copy_save_files_from_game_dir_to_tmp(): (Re-)Creating a symlink for the world directory to ${WORLD_PATH_TMP}" | tee -a ${EVENT_LOG_FILE}
  390.         as_user "ln -s ${WORLD_PATH_TMP} ${WORLD_PATH_SYMLINK} > /dev/null 2>&1"
  391.     fi
  392.  
  393.     echo "${L_TIMESTAMP} [INFO] copy_save_files_from_game_dir_to_tmp(): Going to copy the save files to the temp directory..." | tee -a ${EVENT_LOG_FILE}
  394.  
  395.     # Copy the save files from the "real save path" on disk to the temporary location (in RAM).
  396.     # Note: -u to only copy newer files!
  397.     as_user "rsync -au ${WORLD_PATH_REAL}/ ${WORLD_PATH_TMP} > /dev/null 2>&1"
  398.     #as_user "rsync -auhv ${WORLD_PATH_REAL}/ ${WORLD_PATH_TMP}"
  399.     local RET=$?
  400.  
  401.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  402.  
  403.     if [ $RET -ne 0 ]; then
  404.         echo "${L_TIMESTAMP} [ERROR] copy_save_files_from_game_dir_to_tmp(): Failed to copy over the save files" | tee -a ${EVENT_LOG_FILE}
  405.         return 1
  406.     else
  407.         echo "${L_TIMESTAMP} [INFO] copy_save_files_from_game_dir_to_tmp(): Done copying files" | tee -a ${EVENT_LOG_FILE}
  408.     fi
  409. }
  410.  
  411.  
  412. copy_save_files_from_tmp_to_game_dir() {
  413.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  414.     echo "${L_TIMESTAMP} [INFO] copy_save_files_from_tmp_to_game_dir(): Going to copy the save files from the temp directory to the instance directory" | tee -a ${EVENT_LOG_FILE}
  415.  
  416.     if [ -z "${WORLD_PATH_TMP}" ] || [ -z "${WORLD_PATH_REAL}" ]
  417.     then
  418.         echo "EMPTY PATH"
  419.         exit 1
  420.     fi
  421.  
  422.     if [ ! -e "${WORLD_PATH_TMP}" ]
  423.     then
  424.         echo "${L_TIMESTAMP} [INFO] copy_save_files_from_tmp_to_game_dir: temp directory '${WORLD_PATH_TMP}' does not exist, nothing to do"
  425.         return 0
  426.     fi
  427.  
  428.  
  429.     # Sync any changed files from the temp location to the real save path (the -u flag only copies newer files)
  430.     as_user "rsync -au ${WORLD_PATH_TMP}/ ${WORLD_PATH_REAL} > /dev/null"
  431.     #as_user "rsync -auhv ${WORLD_PATH_TMP}/ ${WORLD_PATH_REAL}"
  432.     local RET=$?
  433.  
  434.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  435.  
  436.     if [ $RET -ne 0 ]; then
  437.         echo "${L_TIMESTAMP} [INFO] copy_save_files_from_tmp_to_game_dir(): Error copying save files!" | tee -a ${EVENT_LOG_FILE}
  438.         return 1
  439.     else
  440.         echo "${L_TIMESTAMP} [INFO] copy_save_files_from_tmp_to_game_dir(): Done copying files" | tee -a ${EVENT_LOG_FILE}
  441.     fi
  442. }
  443.  
  444.  
  445. remove_save_files_from_tmp_location() {
  446.     if [ -n ${INSTANCE_PATH_TMP} ]
  447.     then
  448.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  449.         echo "${L_TIMESTAMP} [INFO] remove_save_files_from_tmp_location(): Removing the save files from the temp directory..." | tee -a ${EVENT_LOG_FILE}
  450.  
  451.         as_user "rm -r --preserve-root ${INSTANCE_PATH_TMP} > /dev/null"
  452.  
  453.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  454.         echo "${L_TIMESTAMP} [INFO] remove_save_files_from_tmp_location(): Done removing files" | tee -a ${EVENT_LOG_FILE}
  455.  
  456.         # World path is a symlink
  457.         #if [ -h "${WORLD_PATH_SYMLINK}" ]
  458.         #then
  459.         #   echo "${L_TIMESTAMP} [INFO] remove_save_files_from_tmp_location(): Changing the symlink to point to the real world" | tee -a ${EVENT_LOG_FILE}
  460.         #   as_user "rm ${WORLD_PATH_SYMLINK} > /dev/null 2>&1"
  461.         #   as_user "cd ${INSTANCE_PATH}"
  462.         #   local WORLDNAME=`basename ${WORLD_PATH_REAL}`
  463.         #   as_user "ln -s ${WORLDNAME} ${WORLD_PATH_SYMLINK} > /dev/null 2>&1"
  464.         #fi
  465.     fi
  466. }
  467.  
  468.  
  469. mc_backup() {
  470.     TIMESTAMP_TAR=`date '+%Y-%m-%d_%H.%M.%S'`
  471.     TIMESTAMP_GIT=`date '+%Y-%m-%d %H:%M'`
  472.  
  473.     if [ "${USE_TEMP_LOCATION}" = "true" ] && [ -e "${WORLD_PATH_TMP}" ]
  474.     then
  475.         # Copy the save files from the temp directory (in RAM) into the actual server directory
  476.         copy_save_files_from_tmp_to_game_dir
  477.         local RET=$?
  478.  
  479.         if [ $RET -ne 0 ]; then
  480.             L_PREFIX=`date "+%Y-%m-%d %H:%M:%S"`
  481.             echo "${L_PREFIX} [INFO] mc_backup(): Failed to copy save files from temp to game dir for instance '${INSTANCE}'" | tee -a ${EVENT_LOG_FILE}
  482.             echo "${L_PREFIX} [INFO] mc_backup(): Failed to copy save files from temp to game dir for instance '${INSTANCE}'" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  483.             return 1
  484.         fi
  485.     fi
  486.  
  487.     if [ "${BACKUP_USING_TAR}" = "true" ]
  488.     then
  489.         L_PREFIX=`date "+%Y-%m-%d %H:%M:%S"`
  490.  
  491.         if [ "${BACKUP_WORLD_ONLY}" = "true" ]
  492.         then
  493.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the world of '${INSTANCE}' using tar" | tee -a ${EVENT_LOG_FILE}
  494.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the world of '${INSTANCE}' using tar" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  495.  
  496.             as_user "cd ${INSTANCE_PATH} && tar --exclude '.git' -czpf ${BACKUP_PATH_TAR}/${BACKUP_PREFIX}_world_${TIMESTAMP_TAR}.tar.gz ${WORLD_NAME} | tee -a ${BACKUP_LOG_FILE} > /dev/null 2>&1"
  497.         else
  498.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the server '${INSTANCE}' using tar" | tee -a ${EVENT_LOG_FILE}
  499.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the server '${INSTANCE}' using tar" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  500.  
  501.             as_user "cd `dirname ${INSTANCE_PATH}` && tar --exclude '.git' -czpf ${BACKUP_PATH_TAR}/${BACKUP_PREFIX}_${TIMESTAMP_TAR}.tar.gz `basename ${INSTANCE_PATH}` | tee -a ${BACKUP_LOG_FILE} > /dev/null 2>&1"
  502.         fi
  503.     fi
  504.  
  505.     if [ "${BACKUP_USING_GIT}" = "true" ]
  506.     then
  507.         # Do we have an additional commit message?
  508.         if [ -n "${1}" ]
  509.         then
  510.             MSG=" ${1}"
  511.         else
  512.             MSG=""
  513.         fi
  514.  
  515.         if [ "${2}" = "true" ]
  516.         then
  517.             local GIT_PRM_ALLOW_EMPTY="--allow-empty"
  518.         fi
  519.  
  520.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  521.         L_PREFIX="${L_TIMESTAMP}"
  522.  
  523.         if [ "${BACKUP_WORLD_ONLY}" = "true" ]
  524.         then
  525.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the world of '${INSTANCE}' using git" | tee -a ${EVENT_LOG_FILE}
  526.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the world of '${INSTANCE}' using git" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  527.  
  528.             as_user "cd ${WORLD_PATH_REAL} && git add -A . | tee -a ${BACKUP_LOG_FILE} && git commit ${GIT_PRM_ALLOW_EMPTY} -m \"${TIMESTAMP_GIT}${MSG}\" | tee -a ${BACKUP_LOG_FILE}"
  529.         else
  530.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the server '${INSTANCE}' using git" | tee -a ${EVENT_LOG_FILE}
  531.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the server '${INSTANCE}' using git" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  532.  
  533.             as_user "cd ${INSTANCE_PATH} && git add -A . | tee -a ${BACKUP_LOG_FILE} && git commit ${GIT_PRM_ALLOW_EMPTY} -m \"${TIMESTAMP_GIT}${MSG}\" | tee -a ${BACKUP_LOG_FILE}"
  534.         fi
  535.     fi
  536.  
  537.     if [ "${BACKUP_USING_RESTIC}" = "true" ]
  538.     then
  539.         L_PREFIX=`date "+%Y-%m-%d %H:%M:%S"`
  540.  
  541.         if [ "${BACKUP_WORLD_ONLY}" = "true" ]
  542.         then
  543.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the world of '${INSTANCE}' using restic" | tee -a ${EVENT_LOG_FILE}
  544.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the world of '${INSTANCE}' using restic" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  545.  
  546.             as_user "restic -r ${BACKUP_RESTIC_REPO} backup \"${INSTANCE_PATH}/${WORLD_NAME}\" --verbose --exclude \".git\" | tee -a ${BACKUP_LOG_FILE}"
  547.         else
  548.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the server '${INSTANCE}' using restic" | tee -a ${EVENT_LOG_FILE}
  549.             echo "${L_PREFIX} [INFO] mc_backup(): Starting a backup of the server '${INSTANCE}' using restic" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  550.  
  551.             as_user "restic -r ${BACKUP_RESTIC_REPO} backup \"${INSTANCE_PATH}\" --verbose --exclude \".git\" | tee -a ${BACKUP_LOG_FILE}"
  552.         fi
  553.     fi
  554.  
  555.     if [ "${BACKUP_SERVICE}" = "true" ]
  556.     then
  557.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  558.         L_PREFIX="${L_TIMESTAMP}"
  559.  
  560.         echo "${L_PREFIX} [INFO] mc_backup(): Backing up service ${SERVICE}" | tee -a ${EVENT_LOG_FILE} > /dev/null
  561.         as_user "cd ${INSTANCE_PATH} && cp -pn ${SERVICE} ${BACKUP_PATH}/${BACKUP_PREFIX}_${TIMESTAMP_TAR}.jar > /dev/null 2>&1"
  562.     fi
  563.  
  564.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  565.     L_PREFIX="${L_TIMESTAMP}"
  566.     echo "${L_PREFIX} [INFO] mc_backup(): Backup of server instance '${INSTANCE}' complete" | tee -a ${EVENT_LOG_FILE} > /dev/null
  567.     echo "${L_PREFIX} [INFO] mc_backup(): Backup of server instance '${INSTANCE}' complete" | tee -a ${BACKUP_LOG_FILE} > /dev/null
  568. }
  569.  
  570. mc_backups_list() {
  571.     if [ "${BACKUP_USING_RESTIC}" = "true" ]
  572.     then
  573.         L_PREFIX=`date "+%Y-%m-%d %H:%M:%S"`
  574.  
  575.         echo "${L_PREFIX} [INFO] mc_backups_list(): Listing latest backups of '${INSTANCE}' made with restic" | tee -a ${EVENT_LOG_FILE}
  576.  
  577.         as_user "restic -r ${BACKUP_RESTIC_REPO} snapshots | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}' | cut -d' ' -f1-4 | tail -n 15"
  578.     fi
  579. }
  580.  
  581. mc_backup_wrapper() {
  582.     if [ ${START_TO_DISABLE_AUTOSAVE_DELAY} -ge 0 ]
  583.     then
  584.         mc_say "§dSERVER BACKUP STARTING"
  585.  
  586.         if [ ${SAVEALL_BACKUP_INTERVAL} -ge 0 ]; then
  587.             mc_saveall
  588.             sleep ${SAVEALL_BACKUP_INTERVAL}
  589.         else
  590.             sleep 2
  591.         fi
  592.  
  593.         mc_backup "${1}"
  594.  
  595.         mc_say "§dSERVER BACKUP FINISHED"
  596.     else
  597.         mc_say "§dSERVER BACKUP STARTING, server going read-only"
  598.         mc_saveoff
  599.  
  600.         if [ ${SAVEALL_BACKUP_INTERVAL} -ge 0 ]; then
  601.             mc_saveall
  602.             sleep ${SAVEALL_BACKUP_INTERVAL}
  603.         else
  604.             sleep 5
  605.         fi
  606.  
  607.         mc_backup "${1}"
  608.  
  609.         mc_say "§dSERVER BACKUP FINISHED, server going read-write"
  610.         mc_saveon
  611.     fi
  612. }
  613.  
  614.  
  615. mc_startifcrashed_basic() {
  616.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  617.     L_PREFIX="${L_TIMESTAMP}"
  618.  
  619.     # If the state file is present, then the server is supposed to be running
  620.     if [ -f "${STATE_FILE}" ]
  621.     then
  622.         # If the state file was present, but the process is not found, we assume that the server has crashed
  623.         if ! pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  624.         then
  625.             echo "${L_PREFIX} [WARNING] mc_startifcrashed_basic(): ${SERVICE} is not running (crashed?)" | tee -a ${EVENT_LOG_FILE}
  626.             echo "${L_PREFIX} [INFO] mc_startifcrashed_basic(): Attempting to start ${SERVICE}..." | tee -a ${EVENT_LOG_FILE}
  627.  
  628.             mc_start
  629.  
  630.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  631.             L_PREFIX="${L_TIMESTAMP}"
  632.  
  633.             if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  634.             then
  635.                 echo "${L_PREFIX} [INFO] mc_startifcrashed_basic(): ${SERVICE} is now running" | tee -a ${EVENT_LOG_FILE}
  636.             else
  637.                 echo "${L_PREFIX} [ERROR] mc_startifcrashed_basic(): Could not start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  638.             fi
  639.         else
  640.             echo "${L_PREFIX} [INFO] mc_startifcrashed_basic(): ${SERVICE} is running" | tee -a ${EVENT_LOG_FILE}
  641.         fi
  642.     else
  643.         echo "${L_PREFIX} [INFO] mc_startifcrashed_basic(): ${SERVICE} has been stopped gracefully" | tee -a ${EVENT_LOG_FILE}
  644.     fi
  645. }
  646.  
  647.  
  648. mc_startifcrashed_ping() {
  649.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  650.     L_PREFIX="${L_TIMESTAMP}"
  651.  
  652.     # If the state file is present, then the server is supposed to be running
  653.     if [ -f "${STATE_FILE}" ]
  654.     then
  655.         # If the state file was present, and the process is found, we try to ping the server
  656.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  657.         then
  658.             echo "${L_PREFIX} [INFO] mc_startifcrashed_ping(): ${SERVICE} is running, pinging it..." | tee -a ${EVENT_LOG_FILE}
  659.  
  660.             # We try the ping a maximum of PING_RETRY_COUNT times, to try and avoid false positive failures and restarts
  661.             COUNTER=0
  662.             while [ ${COUNTER} -lt ${PING_RETRY_COUNT} ]; do
  663.  
  664.                 if ${PING_INVOCATION} | grep ': OK' > /dev/null
  665.                 then
  666.                     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  667.                     L_PREFIX="${L_TIMESTAMP}"
  668.  
  669.                     echo "${L_PREFIX} [INFO] mc_startifcrashed_ping(): ${SERVICE} responded to ping" | tee -a ${EVENT_LOG_FILE}
  670.                     break
  671.                 fi
  672.  
  673.                 sleep ${PING_RETRY_DELAY}
  674.             done
  675.  
  676.             # If the ping failed every time, then we assume that the server has crashed and we will kill it and start it up again
  677.             if [ ${COUNTER} -ge ${PING_RETRY_COUNT} ]
  678.             then
  679.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  680.                 L_PREFIX="${L_TIMESTAMP}"
  681.  
  682.                 echo "${L_PREFIX} [WARNING] mc_startifcrashed_ping(): ${SERVICE} doesn't respond to ping (crashed?)" | tee -a ${EVENT_LOG_FILE}
  683.                 echo "${L_PREFIX} [INFO] mc_startifcrashed_ping(): Killing and (re-)starting ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  684.  
  685.                 mc_kill
  686.                 sleep ${KILL_TO_START_DELAY}
  687.                 mc_start
  688.  
  689.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  690.                 L_PREFIX="${L_TIMESTAMP}"
  691.  
  692.                 if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  693.                 then
  694.                     echo "${L_PREFIX} [INFO] mc_startifcrashed_ping(): ${SERVICE} is now running" | tee -a ${EVENT_LOG_FILE}
  695.                 else
  696.                     echo "${L_PREFIX} [ERROR] mc_startifcrashed_ping(): Could not start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  697.                 fi
  698.             fi
  699.         else
  700.             # Process not found (crashed?), we try to start the server
  701.             echo "${L_PREFIX} [WARNING] mc_startifcrashed_ping(): ${SERVICE} not running (crashed?)" | tee -a ${EVENT_LOG_FILE}
  702.             echo "${L_PREFIX} [INFO] mc_startifcrashed_ping(): Attempting to start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  703.  
  704.             mc_start
  705.  
  706.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  707.             L_PREFIX="${L_TIMESTAMP}"
  708.  
  709.             if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  710.             then
  711.                 echo "${L_PREFIX} [INFO] mc_startifcrashed_ping(): ${SERVICE} is now running" | tee -a ${EVENT_LOG_FILE}
  712.             else
  713.                 echo "${L_PREFIX} [ERROR] mc_startifcrashed_ping(): Could not start ${SERVICE}" | tee -a ${EVENT_LOG_FILE}
  714.             fi
  715.         fi
  716.     else
  717.         # No state file present, the server is supposed to be down
  718.         echo "${L_PREFIX} [INFO] mc_check(): ${SERVICE} has been stopped gracefully" | tee -a ${EVENT_LOG_FILE}
  719.     fi
  720. }
  721.  
  722.  
  723. mc_kill() {
  724.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  725.     L_PREFIX="${L_TIMESTAMP}"
  726.  
  727.     if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  728.     then
  729.         echo "${L_PREFIX} [INFO] mc_kill(): Killing minecraft server instance '${INSTANCE}'..." | tee -a ${EVENT_LOG_FILE}
  730.  
  731.         as_user "pkill -SIGKILL -u ${USERNAME} -f ${SERVICE}"
  732.         sleep ${POST_KILL_DELAY}
  733.  
  734.         COUNTER=0
  735.         while [ ${COUNTER} -lt ${KILL_GRACE_DELAY} ]; do
  736.             if ! pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  737.             then
  738.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  739.                 L_PREFIX="${L_TIMESTAMP}"
  740.                 echo "${L_PREFIX} [INFO] mc_kill(): Server instance '${INSTANCE}' has been killed" | tee -a ${EVENT_LOG_FILE}
  741.  
  742.                 # FIXME: Could this be done cleaner?
  743.                 screen -wipe
  744.  
  745.                 if [ "${USE_TEMP_LOCATION}" = "true" ]
  746.                 then
  747.                     # Copy the save files from the temp directory (in RAM) into the actual server directory
  748.                     copy_save_files_from_tmp_to_game_dir
  749.                     local RET=$?
  750.  
  751.                     if [ $RET -eq 0 ]; then
  752.                         remove_save_files_from_tmp_location
  753.                     fi
  754.                 fi
  755.  
  756.                 break
  757.             fi
  758.  
  759.             sleep 1
  760.  
  761.             ((COUNTER += 1))
  762.         done
  763.  
  764.         if [ ${COUNTER} -ge ${KILL_GRACE_DELAY} ]
  765.         then
  766.             echo "${L_PREFIX} [ERROR] mc_kill(): Unable to kill minecraft server '${INSTANCE}'" | tee -a ${EVENT_LOG_FILE}
  767.         fi
  768.     else
  769.         echo "${L_PREFIX} [WARNING] mc_kill(): Minecraft server instance '${INSTANCE}' was not running" | tee -a ${EVENT_LOG_FILE}
  770.     fi
  771. }
  772.  
  773.  
  774. mc_download_server() {
  775.     # Only do something if we have a version argument
  776.     if [ -n "${1}" ]
  777.     then
  778.         VERSION="${1}"
  779.         # If the requested server version doesn't yet exist, we attempt to download it
  780.         if [ ! -f "${SERVER_FILES_PATH}/${SERVER_FILE_PREFIX}${VERSION}.jar" ]
  781.         then
  782.             MC_SERVER_URL="https://s3.amazonaws.com/Minecraft.Download/versions/${VERSION}/minecraft_server.${VERSION}.jar"
  783.             as_user "wget -q -O \"${SERVER_FILES_PATH}/${SERVER_FILE_PREFIX}${VERSION}.jar\" ${MC_SERVER_URL}"
  784.  
  785.             # If wget returns 0
  786.             if [ "$?" -eq "0" ]
  787.             then
  788.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  789.                 L_PREFIX="${L_TIMESTAMP}"
  790.                 echo "${L_PREFIX} [INFO] mc_download_server(): Downloaded ${MC_SERVER_URL} to ${SERVER_FILES_PATH}/${SERVER_FILE_PREFIX}${VERSION}.jar" | tee -a ${EVENT_LOG_FILE}
  791.             else
  792.                 # Download failed
  793.                 echo "${L_PREFIX} [ERROR] mc_download_server(): Download of ${MC_SERVER_URL} failed" | tee -a ${EVENT_LOG_FILE}
  794.                 # Remove the empty file just created
  795.                 as_user "rm ${SERVER_FILES_PATH}/${SERVER_FILE_PREFIX}${VERSION}.jar"
  796.                 exit 1
  797.             fi
  798.         fi
  799.     fi
  800. }
  801.  
  802.  
  803. mc_update() {
  804.     CURRENT_VERSION=`readlink -f "${INSTANCE_PATH}/${SERVICE}" | sed "s/.*\/${SERVER_FILE_PREFIX}\(.*\)\.jar/\1/"`
  805.  
  806.     # Any version change via this script on this server instance is forbidden
  807.     if [ "${ALLOW_UPDATES}" = 'false' ] && [ "${ALLOW_DOWNGRADES}" = 'false' ]
  808.     then
  809.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  810.         L_PREFIX="${L_TIMESTAMP}"
  811.         echo "${L_PREFIX} [ERROR] mc_update(): Any updates or downgrades of '${SERVICE}' are not allowed (@ ${CURRENT_VERSION})" | tee -a ${EVENT_LOG_FILE}
  812.         return
  813.     fi
  814.  
  815.     if [ -z "${1}" ]
  816.     then
  817.         # No version specified, assume we want the latest stable release
  818.         VERSIONS_URL="https://launchermeta.mojang.com/mc/game/version_manifest.json"
  819.         # Old URL: VERSIONS_URL="https://s3.amazonaws.com/Minecraft.Download/versions/versions.json"
  820.  
  821.         as_user "wget -q -O ${VERSIONS_JSON} ${VERSIONS_URL}"
  822.  
  823.         # Get the latest[release] value
  824.         VERSION=`tr '\r\n' ' ' < ${VERSIONS_JSON} | sed "s/ //g" | sed 's/.*\("latest[^}]\+}\).*/\1/' | sed 's/.*"release":"\([^"]\+\)"}/\1/'`
  825.     else    # Use the version given as an argument
  826.         VERSION="${1}"
  827.     fi
  828.  
  829.     echo "Target version: ${VERSION}, Current version: ${CURRENT_VERSION}"
  830.     #exit
  831.  
  832.     # If the requested version is different from the current version
  833.     if [ "${CURRENT_VERSION}" != "${VERSION}" ]
  834.     then
  835.         # Check that the requested version change is permitted
  836.         # FIXME This won't work correctly with alpha, beta etc. prefixed versions
  837.         if [[ "${VERSION}" < "${CURRENT_VERSION}" ]] && [ "${ALLOW_DOWNGRADES}" != 'true' ]
  838.         then
  839.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  840.             L_PREFIX="${L_TIMESTAMP}"
  841.             echo "${L_PREFIX} [ERROR] mc_update(): Downgrades of '${SERVICE}' are not allowed (${CURRENT_VERSION} -> ${VERSION})" | tee -a ${EVENT_LOG_FILE}
  842.             return
  843.         fi
  844.         # FIXME This won't work correctly with alpha, beta etc. prefixed versions
  845.         if [[ "${VERSION}" > "${CURRENT_VERSION}" ]] && [ "${ALLOW_UPDATES}" != 'true' ]
  846.         then
  847.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  848.             L_PREFIX="${L_TIMESTAMP}"
  849.             echo "${L_PREFIX} [ERROR] mc_update(): Updates of '${SERVICE}' are not allowed (${CURRENT_VERSION} -> ${VERSION})" | tee -a ${EVENT_LOG_FILE}
  850.             return
  851.         fi
  852.  
  853.         # If the server is currently running, broadcast a message before starting the update process
  854.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  855.         then
  856.             RUNNING="true"
  857.  
  858.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  859.             L_PREFIX="${L_TIMESTAMP}"
  860.             echo "${L_PREFIX} [INFO] mc_update(): ${SERVICE} is running, stopping it and starting the update" | tee -a ${EVENT_LOG_FILE}
  861.  
  862.             mc_say "§d=== SERVER UPDATE STARTING ==="
  863.             sleep 5
  864.             mc_stop "broadcast"
  865.         else
  866.             RUNNING="false"
  867.  
  868.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  869.             L_PREFIX="${L_TIMESTAMP}"
  870.             echo "${L_PREFIX} [INFO] mc_update(): ${SERVICE} is stopped, starting the update" | tee -a ${EVENT_LOG_FILE}
  871.         fi
  872.  
  873.         mc_backup "Backup before updating to version ${VERSION} (@ ${CURRENT_VERSION})" "true"
  874.         mc_download_server ${VERSION}
  875.  
  876.         # If the requested server file exists, update the symlink
  877.         if [ -f "${SERVER_FILES_PATH}/${SERVER_FILE_PREFIX}${VERSION}.jar" ]
  878.         then
  879.             as_user "ln -fs \"${SERVER_FILES_PATH}/${SERVER_FILE_PREFIX}${VERSION}.jar\" \"${INSTANCE_PATH}/${SERVICE}\""
  880.  
  881.             if [ "${RUNNING}" = "true" ]
  882.             then
  883.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  884.                 L_PREFIX="${L_TIMESTAMP}"
  885.                 echo "${L_PREFIX} [INFO] mc_update(): Updated '${SERVICE}' to version '${VERSION}', starting ${SERVICE}..." | tee -a ${EVENT_LOG_FILE}
  886.  
  887.                 mc_start
  888.             else
  889.                 L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  890.                 L_PREFIX="${L_TIMESTAMP}"
  891.                 echo "${L_PREFIX} [INFO] mc_update(): Updated '${SERVICE}' to version '${VERSION}'" | tee -a ${EVENT_LOG_FILE}
  892.             fi
  893.         else
  894.             # Download failed
  895.             L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  896.             L_PREFIX="${L_TIMESTAMP}"
  897.             echo "${L_PREFIX} [ERROR] mc_update(): Update of '${SERVICE}' to version '${VERSION}' failed" | tee -a ${EVENT_LOG_FILE}
  898.         fi
  899.     else
  900.         L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  901.         L_PREFIX="${L_TIMESTAMP}"
  902.         echo "${L_PREFIX} [WARNING] mc_update(): '${SERVICE}' is already at version '${VERSION}', not doing anything" | tee -a ${EVENT_LOG_FILE}
  903.     fi
  904. }
  905.  
  906.  
  907. mc_say() {
  908.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  909.     L_PREFIX="${L_TIMESTAMP}"
  910.  
  911.     if [ -n "${1}" ]
  912.     then
  913.         MSG="${1}"
  914.  
  915.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  916.         then
  917. #           echo "${L_PREFIX} [INFO] mc_say(): ${SERVICE} is running, saying '${MSG}'" | tee -a ${EVENT_LOG_FILE}
  918.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"say ${MSG}\"\015'"
  919. #       else
  920. #           echo "${L_PREFIX} [WARNING] mc_say(): ${SERVICE} is not running" | tee -a ${EVENT_LOG_FILE}
  921.         fi
  922.     else
  923.         echo "${L_PREFIX} [ERROR] mc_say(): You must specify a message" | tee -a ${EVENT_LOG_FILE}
  924.     fi
  925. }
  926.  
  927.  
  928. mc_command() {
  929.     L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
  930.     L_PREFIX="${L_TIMESTAMP}"
  931.  
  932.     if [ "${1}" ]
  933.     then
  934.         command="${1}"
  935.  
  936.         if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
  937.         then
  938.             echo "${L_PREFIX} [INFO] mc_command(): ${SERVICE} is running, executing command '${command}'" | tee -a ${EVENT_LOG_FILE}
  939.             as_user "screen -p 0 -S ${SCREEN_SESSION} -X eval 'stuff \"${command}\"\015'"
  940.         fi
  941.     else
  942.         echo "${L_PREFIX} [ERROR] mc_command(): You must specify a server command" | tee -a ${EVENT_LOG_FILE}
  943.     fi
  944. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement