forked from Qortal/qortal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.8 KiB
80 lines
1.8 KiB
#!/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
|
|
|