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.

140 lines
3.2 KiB
Bash

# linux script framework uwsgi about function encapsulation
# Longwei Lai
###################################################################
source "${____FWK_SCRIPT_PATH}/lnx_fwk_log.sh"
source "${____FWK_SCRIPT_PATH}/lnx_fwk_progress.sh"
____UWSGI_PID_FILE=${WEBSVR_PATH}/.uwsgi.pid
____UWSGI_FIFO_FILE=${WEBSVR_PATH}/.uwsgi_master_fifo
____UWSGI_CFG_FILE="${WEBSVR_PATH}/uwsgi.ini"
____UWSGI_LOG_PATH="${WEBSVR_PATH}/logs"
____UWSGI_LOG_FILE_NAME="${____UWSGI_LOG_PATH}/.webserver_`date "+%m_%d_%H_%M_%S.nohuplog"`"
# makesure log path created
# !!! comment for onemt
# mkdir -p "${____UWSGI_LOG_PATH}"
# start uwsgi
function start_uwsgi()
{
if [ `is_uwsgi_running` = TRUE ]; then
log_err "uwsgi running(pid:`get_uwsgi_pid`), please stop first"
return 1
fi
# enter working directory
local old_pwd="`pwd`"
if [ "${old_pwd}" != "${WEBSVR_PATH}" ]; then
cd "${WEBSVR_PATH}"
fi
# startup uwsgi
nohup uwsgi "${____UWSGI_CFG_FILE}" >>"${____UWSGI_LOG_FILE_NAME}" 2>&1 &
local uwsgi_pid=$!
# check startup or not
local ret_code=$?
if [ ${ret_code} -ne 0 ]; then
log_err "start uwsgi failed, return code: ${ret_code}"
cd "${old_pwd}"
return 1
fi
# store uwsgi parent process pid to pid file.
echo -n ${uwsgi_pid} > "${____UWSGI_PID_FILE}"
cd "${old_pwd}"
log_info "uwsgi started, master progress pid: ${uwsgi_pid}"
}
# stop uwsgi
function stop_uwsgi()
{
if [ `is_uwsgi_running` = FALSE ]; then
log_err 'uwsgi not running, stop failed!'
return 1
fi
local uwsgi_pid=`get_uwsgi_pid`
stop_pidfile "${____UWSGI_PID_FILE}"
log_info "uwsgi(pid:${uwsgi_pid}) stopped!"
}
# 重新载入py代码(在代码有修改后调用,将完成所有workers的优雅重启)
function reload_uwsgi()
{
reload_uwsgi_check
if [ $? != 0 ]; then
return 1
fi
# Send SIGHUP to reload.
# local uwsgi_pid=`get_uwsgi_pid`
# kill -SIGHUP ${uwsgi_pid}
# Write 'r' command to fifo file
echo 'r' > "${____UWSGI_FIFO_FILE}"
log_info 'all uwsgi workers reloaded!'
}
function chain_reload_uwsgi()
{
reload_uwsgi_check
if [ $? != 0 ]; then
return 1
fi
# Write 'c' command to fifo file
echo 'c' > "${____UWSGI_FIFO_FILE}"
sleep 6.18
log_info 'all uwsgi workers reloaded!'
}
function reload_uwsgi_check()
{
if [ `is_uwsgi_running` = FALSE ]; then
log_warn "uwsgi not start, will startup first"
start_uwsgi
if [ $? != 0 ]; then
return 1
fi
log_info 'wait 5 seconds to wait all uwsgi workers startup done...'
sleep 5
fi
return 0
}
function show_uwsgi_status()
{
if [ `is_uwsgi_running` = TRUE ]; then
log_info "uwsgi running, pid:`get_uwsgi_pid`"
echo 's' > "${____UWSGI_FIFO_FILE}"
else
log_info "uwsgi stopped!"
fi
}
# 确认uwsgi是否在运行中
function is_uwsgi_running()
{
is_pidfile_running "${____UWSGI_PID_FILE}"
}
# 取得uwsgi pid
function get_uwsgi_pid()
{
if [ `is_uwsgi_running` != "TRUE" ]; then
echo -n "0"
else
echo -n "`cat "${____UWSGI_PID_FILE}"`"
fi
}