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
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
|
|
}
|
|
|