#!/bin/bash readonly EXPLORER_PATH=$(dirname $(dirname $(readlink -f "$0"))) NODE_PATH="" MODE="" # Check if parameters were passed into the script if [ -n "${1}" ]; then # At least one parameter has been passed in case ${1} in "update") # Index update MODE="index update" ;; "check") # Index check MODE="index check" # Check if the next parameter exists if [ -n "${2}" ]; then # Add onto the check cmd MODE="${MODE} ${2}" fi ;; "reindex") # Index reindex MODE="index reindex" ;; "reindex-rich") # Index reindex-rich MODE="index reindex-rich" ;; "reindex-txcount") # Index reindex-txcount MODE="index reindex-txcount" ;; "reindex-last") # Index reindex-last MODE="index reindex-last" ;; "market") # Market update MODE="market" ;; "peers") # Peers update MODE="peers" ;; "masternodes") # Masternodes update MODE="masternodes" ;; *) # Check if this is a file that exists on the filesystem if [ -f ${1} ]; then # The file exists. Assume this is the path to node NODE_PATH="${1}" fi ;; esac # Check if the mode is already set if [ -z "${MODE}" ]; then # Mode is not set so check if the next parameter exists if [ -n "${2}" ]; then # Determine which mode this last parameter is case ${2} in "update") # Index update MODE="index update" ;; "check") # Index check MODE="index check" # Check if the next parameter exists if [ -n "${3}" ]; then # Add onto the check cmd MODE="${MODE} ${3}" fi ;; "reindex") # Index reindex MODE="index reindex" ;; "reindex-rich") # Index reindex-rich MODE="index reindex-rich" ;; "reindex-txcount") # Index reindex-txcount MODE="index reindex-txcount" ;; "reindex-last") # Index reindex-last MODE="index reindex-last" ;; "market") # Market update MODE="market" ;; "peers") # Peers update MODE="peers" ;; "masternodes") # Masternodes update MODE="masternodes" ;; esac elif [ -n "${NODE_PATH}" ]; then # Node path was specified but no mode, so default to 'index update' mode MODE="index update" fi fi else # No parameters specified so default to 'index update' mode MODE="index update" fi # Check if the mode is set if [ -n "${MODE}" ]; then # Mode is set # Check if the desired mode requires a lock if [ "${MODE}" != "peers" ] && [ "${MODE}" != "masternodes" ]; then # A lock is required # Check if this is a reindex if [ "${MODE}" = "index reindex" ]; then # Prompt for the reindex echo "You are about to delete all blockchain data (transactions and addresses)" echo "and resync from the genesis block." echo "Are you sure you want to do this? [y/n]: "; read -p "" REINDEX_ANSWER # Determine if the reindex should proceed case "$REINDEX_ANSWER" in y|Y|yes|Yes|YES) ;; *) echo "Process aborted. Nothing was deleted." && exit ;; esac fi # Check if the script is already running (tmp/index.pid file already exists) if [ -f "${EXPLORER_PATH}/tmp/index.pid" ]; then # The tmp/index.pid file exists. Check if the process is actually still running ps -p `cat ${EXPLORER_PATH}/tmp/index.pid` > /dev/null if [ $? -eq 0 ]; then # Script is running so the data is locked and we must exit now and try again later echo "Script already running.." exit 1 else # Script is not actually running so we can delete the lock file rm "${EXPLORER_PATH}/tmp/index.pid" fi fi fi # Check if the node path was specified if [ -z "${NODE_PATH}" ]; then # Node path not specified so lookup using the 'which' cmd eval "cd ${EXPLORER_PATH} && $(which node) scripts/sync.js ${MODE}" else # Node path specified eval "cd ${EXPLORER_PATH} && ${NODE_PATH} scripts/sync.js ${MODE}" fi else # Mode not set so load the sync script without specifying the mode to return the usage options eval "cd ${EXPLORER_PATH} && $(which node) scripts/sync.js" fi