forked from Qortal/qortal
e257fd8628
This brings the behaviour closer to the old version so should hopefully reduce the amount of newly introduced issues. If an API key is unavailable, it will fall back to using `kill -15 $pid` (i.e. a SIGTERM).
81 lines
1.8 KiB
Bash
Executable File
81 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Check for color support
|
|
if [ -t 1 ]; then
|
|
ncolors=$( tput colors )
|
|
if [ -n "${ncolors}" -a "${ncolors}" -ge 8 ]; then
|
|
if normal="$( tput sgr0 )"; then
|
|
# use terminfo names
|
|
red="$( tput setaf 1 )"
|
|
green="$( tput setaf 2)"
|
|
else
|
|
# use termcap names for FreeBSD compat
|
|
normal="$( tput me )"
|
|
red="$( tput AF 1 )"
|
|
green="$( tput AF 2)"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Track the pid if we can find it
|
|
read pid 2>/dev/null <run.pid
|
|
is_pid_valid=$?
|
|
|
|
# Swap out the API port if the --testnet (or -t) argument is specified
|
|
api_port=12391
|
|
if [[ "$@" = *"--testnet"* ]] || [[ "$@" = *"-t"* ]]; then
|
|
api_port=62391
|
|
fi
|
|
|
|
# Attempt to locate the process ID if we don't have one
|
|
if [ -z "${pid}" ]; then
|
|
pid=$(ps aux | grep '[q]ortal.jar' | head -n 1 | awk '{print $2}')
|
|
is_pid_valid=$?
|
|
fi
|
|
|
|
# Locate the API key if it exists
|
|
apikey=$(cat apikey.txt)
|
|
success=0
|
|
|
|
# Try and stop via the API
|
|
if [ -n "$apikey" ]; then
|
|
echo "Stopping Qortal via API..."
|
|
if curl --url "http://localhost:${api_port}/admin/stop?apiKey=$apikey" 1>/dev/null 2>&1; then
|
|
success=1
|
|
fi
|
|
fi
|
|
|
|
# Try to kill process with SIGTERM
|
|
if [ "$success" -ne 1 ] && [ -n "$pid" ]; then
|
|
echo "Stopping Qortal process $pid..."
|
|
if kill -15 "${pid}"; then
|
|
success=1
|
|
fi
|
|
fi
|
|
|
|
# Warn and exit if still no success
|
|
if [ "$success" -ne 1 ]; then
|
|
if [ -n "$pid" ]; then
|
|
echo "${red}Stop command failed - not running with process id ${pid}?${normal}"
|
|
else
|
|
echo "${red}Stop command failed - not running?${normal}"
|
|
fi
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$success" -eq 1 ]; then
|
|
echo "Qortal node should be shutting down"
|
|
if [ "${is_pid_valid}" -eq 0 ]; then
|
|
echo -n "Monitoring for Qortal node to end"
|
|
while s=`ps -p $pid -o stat=` && [[ "$s" && "$s" != 'Z' ]]; do
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
echo
|
|
echo "${green}Qortal ended gracefully${normal}"
|
|
rm -f run.pid
|
|
fi
|
|
fi
|
|
|
|
exit 0
|