416 lines
8.6 KiB
Bash
Executable File
416 lines
8.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# set log path(default)
|
|
# WORKING_DIRECOTYR=`pwd`
|
|
# LOG_PATH="${WORKING_DIRECOTYR}/temp_imxtxnd.log"
|
|
|
|
# $1: log filename, $2: log limit size
|
|
func_check_log_file()
|
|
{
|
|
LOG_CHK_SIZE=1048576
|
|
if [ -n "$2" ];then
|
|
LOG_CHK_SIZE=$2
|
|
fi
|
|
|
|
if [ -f "$1" ];then
|
|
|
|
LOG_SIZE=`ls -la $1 | awk -F' ' '{print $5}'`
|
|
if [ $? -eq 0 ]; then
|
|
|
|
if [ ${LOG_SIZE} -gt ${LOG_CHK_SIZE} ]; then
|
|
if [ -f $1.bak ];then
|
|
rm -rf $1.bak
|
|
fi
|
|
|
|
mv $1 $1.bak
|
|
# rm -rf $1
|
|
# echo "log size is over. remove log file.[size:${LOG_SIZE},file:$1]"
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
# $1: log filename $2: log string
|
|
func_log()
|
|
{
|
|
CUR_DATE=`date +%Y%m%d.%H%M%S`
|
|
|
|
# nfs 환경에서 한개의 위치를 공유하여 서로 다른 서버에서
|
|
# 접근 중인 경우 imxtxnd가 그냥 종료되버린다.
|
|
|
|
if [ -n "$1" ];
|
|
then
|
|
func_check_log_file "$1" 10240
|
|
echo "${CUR_DATE}[${RUN_MODE}] $2" >> "$1"
|
|
else
|
|
echo "${CUR_DATE}[${RUN_MODE}] $2"
|
|
fi
|
|
}
|
|
|
|
FUNC_RESULT=""
|
|
|
|
# $1: pid, $2: check process name
|
|
func_is_running_process()
|
|
{
|
|
if [ -z "$1" ];
|
|
then
|
|
func_log "" "pid is wrong."
|
|
FUNC_RESULT="false"
|
|
return
|
|
fi
|
|
|
|
PROC_NAME=`ps -p $1 -o args= | awk -F' ' '{print $1}'`
|
|
|
|
func_log "" "EXEC_PID[$1],PROC_NAME[${PROC_NAME}]"
|
|
if [ "${PROC_NAME}" = "$2" ];
|
|
then
|
|
FUNC_RESULT="true"
|
|
else
|
|
FUNC_RESULT="false"
|
|
fi
|
|
}
|
|
|
|
# $1: exit code, $2: message
|
|
func_usage_exit()
|
|
{
|
|
if [ -n "$2" ];
|
|
then
|
|
echo "$2"
|
|
fi
|
|
|
|
echo "imxtxnd [options]"
|
|
echo "options:"
|
|
echo " --[install|uninstall|continue|daemon]"
|
|
echo " install: Start imxtxn as a new daemon."
|
|
echo " uninstall: Start Terminate running imxtxn."
|
|
echo " continue: Continuing from imxtxn already running."
|
|
echo " daemon: Starts as a standalone daemon.(default)"
|
|
echo " --set-home=[directory] Set the InterMax home directory."
|
|
echo " (default:current direcotry)"
|
|
echo " --bit=[32|64] Set 32 or 64 bit.(default:64)"
|
|
echo ""
|
|
|
|
exit $1
|
|
}
|
|
|
|
|
|
##########################################
|
|
# option
|
|
SELF_PROC_PATH="$0"
|
|
if [ -n "$1" ];
|
|
then
|
|
|
|
for i in $@
|
|
do
|
|
|
|
echo "$i"
|
|
|
|
case "$i" in
|
|
--install)
|
|
RUN_MODE="install"
|
|
;;
|
|
--uninstall)
|
|
RUN_MODE="uninstall"
|
|
;;
|
|
--continue)
|
|
RUN_MODE="continue"
|
|
;;
|
|
--daemon)
|
|
RUN_MODE="daemon"
|
|
;;
|
|
--set-home=*)
|
|
ENV_INTERMAX_HOME=`echo "$i" | awk -F'=' '{print $2}'`
|
|
;;
|
|
--bit=*)
|
|
ENV_BIT=`echo "$i" | awk -F'=' '{print $2}'`
|
|
;;
|
|
--help)
|
|
func_usage_exit 0
|
|
;;
|
|
*)
|
|
func_usage_exit 1 "option is wrong."
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
##########################################
|
|
|
|
|
|
##########################################
|
|
# os
|
|
# linux 만 테스트 해봄
|
|
OS_NAME=`uname -s`
|
|
case $OS_NAME in
|
|
"HP-UX" )
|
|
ARCH=`uname -m`
|
|
if [ ! "${ARCH}" = "ia64" ];
|
|
then
|
|
func_log "${LOG_PATH}" "${ARCH} is not support."
|
|
exit 1
|
|
fi
|
|
ENV_OS_TYPE=hpia
|
|
UNIX95=1
|
|
;;
|
|
"SunOS" )
|
|
ENV_OS_TYPE=sun
|
|
;;
|
|
"AIX" )
|
|
ENV_OS_TYPE=aix
|
|
;;
|
|
"Linux" )
|
|
ENV_OS_TYPE=linux
|
|
# ENV_OS_TYPE=sun
|
|
;;
|
|
* )
|
|
func_log "${LOG_PATH}" "Unkown OS Name[$OS_NAME]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
##########################################
|
|
|
|
##########################################
|
|
# set default bit
|
|
if [ "${ENV_BIT}" = "" ];
|
|
then
|
|
# default 64 bit
|
|
ENV_BIT=64
|
|
fi
|
|
##########################################
|
|
|
|
##########################################
|
|
# set default run mode
|
|
if [ "${RUN_MODE}" = "" ];
|
|
then
|
|
# default 64 bit
|
|
RUN_MODE="daemon"
|
|
fi
|
|
##########################################
|
|
|
|
|
|
##########################################
|
|
# set intermax home directory
|
|
# 1. input option
|
|
# 2. environment INTERMAX_HOME
|
|
# 3. current directory
|
|
|
|
if [ ! "${ENV_INTERMAX_HOME}" = "" ];
|
|
then
|
|
INTERMAX_HOME="${ENV_INTERMAX_HOME}"
|
|
export INTERMAX_HOME
|
|
fi
|
|
|
|
if [ "${INTERMAX_HOME}" = "" ];
|
|
then
|
|
# set current direcotry base
|
|
CUR_DIR=`pwd`
|
|
cd ..
|
|
INTERMAX_HOME=`pwd`
|
|
export INTERMAX_HOME
|
|
cd ${CUR_DIR}
|
|
fi
|
|
##########################################
|
|
|
|
|
|
|
|
##########################################
|
|
# check intermax home directory
|
|
if [ ! -d ${INTERMAX_HOME}/lib/imx ];
|
|
then
|
|
func_log "${LOG_PATH}" "InterMax Home Directory is worng.[${INTERMAX_HOME}]"
|
|
exit 1
|
|
fi
|
|
|
|
# 이건 없으면 새로 생성해야 하나.. 일단 에러 처리
|
|
if [ ! -d ${INTERMAX_HOME}/data/agent ];
|
|
then
|
|
func_log "${LOG_PATH}" "InterMax Home Directory is worng.[${INTERMAX_HOME}]"
|
|
exit 1
|
|
fi
|
|
|
|
##########################################
|
|
|
|
|
|
|
|
##########################################
|
|
# reset log path & chagne directory to InterMax home
|
|
|
|
# cd ${INTERMAX_HOME}
|
|
func_log "${LOG_PATH}" "InterMax Home Directory [${INTERMAX_HOME}]"
|
|
|
|
# 여기 이전에는 로그를 화면에 출력하도록 한다.
|
|
LOG_PATH="${INTERMAX_HOME}/log/imxtxnd.log"
|
|
|
|
##########################################
|
|
|
|
##########################################
|
|
# set execute process path
|
|
|
|
EXEC_PROCESS="${INTERMAX_HOME}/lib/imx/imxtxn"
|
|
# echo "execute process path[${EXEC_PROCESS}]"
|
|
func_log "${LOG_PATH}" "execute process path[${EXEC_PROCESS}]"
|
|
|
|
PROC_PID_PATH=${INTERMAX_HOME}/data/agent/imxtxn
|
|
func_log "${LOG_PATH}" "PROC_PID_PATH[$PROC_PID_PATH]"
|
|
##########################################
|
|
|
|
##########################################
|
|
# copy imxtxn(if not exist)
|
|
if [ ! -f ${EXEC_PROCESS} ];
|
|
then
|
|
cp ${INTERMAX_HOME}/lib/imx/imxtxn_${ENV_OS_TYPE}_${ENV_BIT} ${EXEC_PROCESS}
|
|
if [ ! "$?" = "0" ];
|
|
then
|
|
func_log "${LOG_PATH}" "${INTERMAX_HOME}/lib/imx/imxtxn_${ENV_OS_TYPE}_${ENV_BIT} is not exist."
|
|
exit 3
|
|
fi
|
|
fi
|
|
##########################################
|
|
|
|
##########################################
|
|
# check config
|
|
|
|
# test command(0 or 1)
|
|
# sed -n '/ENABLE_TXN_STANDALONE=\(.*\)/p' cfg/agent/imx.prop | awk -F'=' '{if($2=="1") exit(0); else exit(1);}'; echo "$?"
|
|
CMD_RESULT=`sed -n '/ENABLE_TXN_STANDALONE=\(.*\)/p' ${INTERMAX_HOME}/cfg/agent/imx.prop`
|
|
if [ ! "$?" = "0" ];
|
|
then
|
|
echo "check please - imx config file(imx.prop)"
|
|
exit 1
|
|
fi
|
|
|
|
CFG_ENABLE_TXN_STANDALONE=`echo "${CMD_RESULT}" | awk -F'=' '{print $2}'`
|
|
if [ ! "${CFG_ENABLE_TXN_STANDALONE}" = "1" ];
|
|
then
|
|
echo "check please - ENABLE_TXN_STANDALONE option in imx.prop(value:${CFG_ENABLE_TXN_STANDALONE})"
|
|
exit 1
|
|
fi
|
|
|
|
echo "ENABLE_TXN_STANDALONE config checked."
|
|
##########################################
|
|
|
|
##########################################
|
|
# run process
|
|
|
|
# stop mode에서 INTERMAX_HOME이 필요하여 여기에서 install, uninstall을 처리한다.
|
|
case ${RUN_MODE} in
|
|
"install")
|
|
if [ -f "${PROC_PID_PATH}" ];
|
|
then
|
|
func_is_running_process \
|
|
`cat ${PROC_PID_PATH}` \
|
|
"${EXEC_PROCESS}"
|
|
if [ "${FUNC_RESULT}" = "true" ];
|
|
then
|
|
echo "imxtxnd - imxtxn is already running."
|
|
echo "imxtxnd - Rerun imxtxnd with run mode \"continue\"."
|
|
func_log "" "imxtxnd - imxtxn is already running."
|
|
func_log "" "imxtxnd - 'imxtxnd --stop' or delete '${INTERMAX_HOME}/data/agent/imxtxnd.pid'"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
nohup ${SELF_PROC_PATH} --daemon --set-home=${INTERMAX_HOME} 1>/dev/null 2>&1 &
|
|
echo "$!" > ${INTERMAX_HOME}/data/agent/imxtxnd.pid
|
|
|
|
echo "imxtxnd - installed[$!]"
|
|
func_log "${LOG_PATH}" "imxtxnd - installed[$!]"
|
|
|
|
exit 0
|
|
;;
|
|
|
|
"continue")
|
|
TEMP_STR=""
|
|
if [ -f "${INTERMAX_HOME}/data/agent/imxtxnd.pid" ];
|
|
then
|
|
TEMP_PID=`cat ${INTERMAX_HOME}/data/agent/imxtxnd.pid`
|
|
TEMP_STR=`ps -p ${TEMP_PID} | grep imxtxnd`
|
|
fi
|
|
|
|
if [ -n "${TEMP_STR}" ];
|
|
then
|
|
func_log "" "${TEMP_STR}"
|
|
func_log "" "imxtxnd - imxtxnd is not running."
|
|
exit 1
|
|
fi
|
|
|
|
# imxtxnd 실행되지 않은 상태에서 imxtxn만 실행 중인 경우
|
|
# 실행 중인 imxtxn을 그대로 감시한다.
|
|
nohup ${SELF_PROC_PATH} --daemon --set-home=${INTERMAX_HOME} 1>/dev/null 2>&1 &
|
|
echo "$!" > ${INTERMAX_HOME}/data/agent/imxtxnd.pid
|
|
|
|
echo "imxtxnd - continue[$!]"
|
|
func_log "${LOG_PATH}" "imxtxnd - continue[$!]"
|
|
|
|
exit 0
|
|
;;
|
|
|
|
"uninstall")
|
|
if [ -f "${INTERMAX_HOME}/data/agent/imxtxnd.pid" ];
|
|
then
|
|
rm -rf ${INTERMAX_HOME}/data/agent/imxtxnd.pid
|
|
fi
|
|
|
|
if [ -f "${PROC_PID_PATH}" ];
|
|
then
|
|
rm -rf ${PROC_PID_PATH}
|
|
func_log "${LOG_PATH}" "imxtxnd - uninstall"
|
|
else
|
|
func_log "${LOG_PATH}" "imxtxnd - imxtxn is not running."
|
|
fi
|
|
exit 0
|
|
;;
|
|
"daemon")
|
|
func_log "${LOG_PATH}" "imxtxnd daemon"
|
|
;;
|
|
esac
|
|
##########################################
|
|
|
|
|
|
|
|
|
|
##########################################
|
|
# run imxtxn
|
|
if [ ! -f "${PROC_PID_PATH}" ];
|
|
then
|
|
${EXEC_PROCESS} -D
|
|
func_log "${LOG_PATH}" "execute process[$EXEC_PROCESS]"
|
|
sleep 3
|
|
fi
|
|
|
|
if [ ! -f "${PROC_PID_PATH}" ];
|
|
then
|
|
func_log "${LOG_PATH}" "execute process has failed.[${EXEC_PROCESS}]"
|
|
exit 4
|
|
fi
|
|
|
|
PROC_NAME=""
|
|
while [ -f "${PROC_PID_PATH}" ]
|
|
do
|
|
echo "PROC_PID_PATH[${PROC_PID_PATH}][$EXEC_PROCESS]"
|
|
PROC_PID=`cat ${PROC_PID_PATH}`
|
|
echo "PROC_PID[${PROC_PID}]"
|
|
|
|
func_is_running_process \
|
|
"${PROC_PID}" \
|
|
"${EXEC_PROCESS}"
|
|
if [ "${FUNC_RESULT}" = "false" ];
|
|
then
|
|
func_log "${LOG_PATH}" "process is not running."
|
|
# run process
|
|
${EXEC_PROCESS} -D
|
|
func_log "${LOG_PATH}" "execute process[$EXEC_PROCESS]"
|
|
fi
|
|
|
|
sleep 3
|
|
|
|
done
|
|
##########################################
|
|
|
|
|
|
func_log "${LOG_PATH}" "imxtxnd end"
|