You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
5.7 KiB
Bash

# linux script framework server about functions encapsulation
# Longwei Lai
###################################################################
source "${____FWK_SCRIPT_PATH}/lnx_fwk_log.sh"
source "${____FWK_SCRIPT_PATH}/lnx_fwk_defs.sh"
source "${____FWK_SCRIPT_PATH}/lnx_fwk_path.sh"
source "${____FWK_SCRIPT_PATH}/lnx_fwk_progress.sh"
# control commands define
____FWK_SERVER_CTRL_START=start
____FWK_SERVER_CTRL_STOP=stop
____FWK_SERVER_CTRL_RESTART=restart
____FWK_SERVER_CTRL_IS_RUNNING=is_running
____FWK_SERVER_CTRL_LIST_STATUS=list_status
# ctrl specific server
# arguments:
# arg1: server name
# arg2: server control cmd
# returns:
# echo style:
# N/A
# return style:
# 0: success
# 1: failed
function ctrl_server()
{
local svr_name="$1"
local ctrl_cmd="$2"
local args=($@)
local svr_args=${args[@]:2}
if [ "${ctrl_cmd}" = "${____FWK_SERVER_CTRL_START}" ]; then
start_server "${svr_name}" ${svr_args}
elif [ "${ctrl_cmd}" = "${____FWK_SERVER_CTRL_STOP}" ]; then
stop_server "${svr_name}" ${svr_args}
elif [ "${ctrl_cmd}" = "${____FWK_SERVER_CTRL_RESTART}" ]; then
restart_server "${svr_name}" ${svr_args}
elif [ "${ctrl_cmd}" = "${____FWK_SERVER_CTRL_IS_RUNNING}" ]; then
is_server_running "${svr_name}" ${svr_args}
elif [ "${ctrl_cmd}" = "${____FWK_SERVER_CTRL_LIST_STATUS}" ]; then
list_server_status "${svr_name}" ${svr_args}
else
log_err "unknown ctrl command: ${ctrl_cmd}"
return 1
fi
}
# start specific server
# arguments:
# arg1: server name
# arg2: server entry
# arg3-n: server start arguments
# returns:
# echo style:
# N/A
# return style:
# 0: success
# 1: failed
# 2: already start, don't need start again
function start_server()
{
local svr_name="$1"
local svr_entry="$2"
local show_name="$(get_server_show_name "${svr_name}")"
local pid_file="$(make_server_pid_file_path "${svr_name}")"
local args=($@)
local svr_args="${args[@]:2}"
# switch current directory to server path
local old_path="`pwd`"
cd "`dirname "${svr_path}"`"
# makesure just running one instance
if [ "$(is_server_running "${svr_name}")" = TRUE ]; then
log_warn "${show_name} is running(pid: `cat "${pid_file}"`), don't need start!"
cd "${old_path}"
return 2
fi
# start server
local nohup_file=""`dirname "${svr_path}"`"/."${svr_name}".${____FWK_NOHUP_SUFFIX}"
nohup ${svr_entry} ${svr_args} 1>"${nohup_file}" 2>&1 &
local svr_pid=$!
if [ $? -ne 0 ]; then
log_err "start ${show_name} failed, return code: $?, timeout?: ${check_timeout}"
return 1
fi
echo -n "${svr_pid}" > "${pid_file}"
# back to old path
cd "${old_path}"
log_info "start ${show_name} success, pid: ${svr_pid}"
}
# stop specific server
# arguments:
# arg1: server name
# returns:
# echo style:
# N/A
# return style:
# N/A
function stop_server()
{
local svr_name="$1"
local pid_file="$(make_server_pid_file_path "${svr_name}")"
local server_running=`is_server_running "${svr_name}"`
if [ "${server_running}" = TRUE ]; then
stop_pidfile "${pid_file}"
fi
if [ "${server_running}" = TRUE ]; then
local nohup_file=""`dirname "${pid_file}"`"/."${svr_name}".${____FWK_NOHUP_SUFFIX}"
if [ -f "${nohup_file}" ]; then
log_info "Found ${svr_name} nohup file, backup it"
local backup_nohup_file="${nohup_file}.`date "+%m%d%H%M%S"`"
\cp -f "${nohup_file}" "${backup_nohup_file}"
fi
fi
}
# restart specific server
# arguments:
# arg1: server name
# returns:
# echo style:
# N/A
# return style:
# N/A
function restart_server()
{
stop_server $@
start_server $@
}
# check specific server is running or not
# arguments:
# arg1: server name
# returns:
# echo style:
# TRUE: server running
# FALSE: server not running
# return style:
# N/A
function is_server_running()
{
local svr_name="$1"
local pid_file="$(make_server_pid_file_path "${svr_name}")"
echo -n "$(is_pidfile_running "${pid_file}")"
}
# list specific server status
# arguments:
# arg1: server name
# returns:
# echo style:
# N/A
# return style:
# N/A
function list_server_status()
{
local svr_name="$1"
echo -n -e "${svr_name} status: "
if [ "$(is_server_running "${svr_name}")" = "TRUE" ]; then
local pid_file="$(make_server_pid_file_path "${svr_name}")"
echo -n "Running(pid: "
echo "`cat "${pid_file}"`)"
else
echo "Stopped"
fi
}
# get server debug option
# arguments:
# arg1: server name
# returns:
# echo style:
# TRUE: build with debug
# FALSE: build with release
# return style:
# N/A
function get_server_debug_option()
{
# get debug option(from option directory)
local dbg_opt_file="${____FWK_SVR_DEBUG_OPTION_FILE}"
if [ ! -e "${dbg_opt_file}" ]; then
echo -n FALSE
return
fi
local dbg_opt="`cat "${dbg_opt_file}"`"
if [ "${dbg_opt}" != TRUE ]; then
echo -n FALSE
else
echo -n TRUE
fi
}
# get server show name(appended all server options)
# arguments:
# arg1: server name
# returns:
# echo style:
# <server show name>: the server show name, appended all server options
# return style:
# N/A
function get_server_show_name()
{
local svr_name="$1"
local show_name="${svr_name}("
# append debug/release option
local dbg_opt="$(get_server_debug_option "${svr_name}")"
if [ "${dbg_opt}" = TRUE ]; then
show_name+="debug"
else
show_name+="release"
fi
show_name+=")"
echo -n "${show_name}"
}