#!/usr/bin/env bash ### ================================================================================================ ### 프로그램 명 : proxyctl.bash, Version 0.00.011 ### 프로그램 설명 : OBCon Proxy를 관리 한다. ### 작성자 : 산사랑 (pnuskgh@gmail.com, 010-5034-3931) ### 작성일 : 2018.10.19 ~ 2024.02.07 ### ----[History 관리]------------------------------------------------------------------------------ ### 수정자 : ### 수정일 : ### 수정 내용 : ### --- [Copyright] -------------------------------------------------------------------------------- ### Copyright (c) 1995~2024 pnuskgh, 오픈소스 비즈니스 컨설팅 ### All rights reserved. ### ================================================================================================ ### ------------------------------------------------------------------------------------------------ ### 초기 환경을 설정 합니다. ### ------------------------------------------------------------------------------------------------ export LANG=ko_KR.utf8 export TZ=Asia/Seoul #--- NVM 사용에 따른 설정을 한다. export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" HOME_SCADA="/work/appl/obcon" if [[ "${HOSTNAME}" == "service.obcon.biz" ]]; then HOME_SCADA="/work/appl/OBCon_SCADA" else HOME_SCADA="/work/appl/obcon" fi NODE=`which node` # NODE='/root/.nvm/versions/node/v12.13.1/bin/node' PROC_NAME="OBCon Proxy" PROC_STR="${NODE} ${HOME_SCADA}/bin/proxy.js --conf config_scada_override.js" JOB_LOG="${HOME_SCADA}/logs/watchdog_proxy.log" TIMESTAMP=`date +%Y%m%d_%H%M%S` ### ------------------------------------------------------------------------------------------------ ### 사용법을 표시 합니다. ### ------------------------------------------------------------------------------------------------ funcUsing() { echo "Using : proxyctl.bash COMMAND [OPTIONS]" echo " COMMAND : help, start, restart, stop, status, log, watchdog" echo " " exit 2 } ### ------------------------------------------------------------------------------------------------ ### OBCon Proxy 관리 함수 ### ------------------------------------------------------------------------------------------------ funcStart() { local OPT=$1 PROC_PID=`/bin/ps -ef | /bin/grep -v /bin/grep | /bin/grep "${PROC_STR}" | /bin/awk '{print $2}'` if [[ "${PROC_PID}" == "" ]]; then cd ${HOME_SCADA} if [[ "${OPT}" == "systemctl" ]]; then ${NODE} /work/appl/obcon/bin/proxy.js --conf config_scada_override.js > /dev/null 2>&1 & else /bin/nohup ${NODE} /work/appl/obcon/bin/proxy.js --conf config_scada_override.js > /dev/null 2>&1 & fi /bin/echo "${PROC_NAME}를 시작 하였습니다. " else /bin/echo "${PROC_NAME}가 이미 살아 있습니다." fi /bin/sleep 1 funcStatus } funcStop() { # /bin/curl --silent http://localhost/modbusapi/process --data '{"cmd":"q"}' --header "Content-Type:application/json;characterset=utf-8" --output /dev/null #--- Process가 죽지 않은 경우 강제로 죽인다. # /bin/sleep 1 PROC_PID=`/bin/ps -ef | /bin/grep -v /bin/grep | /bin/grep "${PROC_STR}" | /bin/awk '{print $2}'` if [[ "${PROC_PID}" == "" ]]; then /bin/echo "${PROC_NAME}가 종료 되었습니다." else /bin/echo "${PROC_NAME}를 강제로 종료 합니다." for PID in ${PROC_PID}; do /bin/kill -9 ${PID} > /dev/null 2>&1 done fi } funcRestart() { funcStop sleep 0.5 funcStart } #--- 분 (0-59) 시 (0-23) 일 (1-31) 월 (1-12) 요일 (0. 일요일, 6. 토요일) 명령어 #--- * * * * * su - -c '/work/appl/obcon/proxyctl.bash watchdog' funcWatchdog() { PROC_PID=`/bin/ps -ef | /bin/grep -v /bin/grep | /bin/grep "${PROC_STR}" | /bin/awk '{print $2}'` if [[ "${PROC_PID}" == "" ]]; then /bin/echo "OBCon Proxy 기동 : ${TIMESTAMP}" >> ${JOB_LOG} funcStart fi } funcStatus() { /bin/date /bin/ps -ef | /bin/grep -v /bin/grep | /bin/grep "${PROC_STR}" /usr/bin/echo ' ' } ### ------------------------------------------------------------------------------------------------ ### Command Line Argument를 확인 합니다. ### ------------------------------------------------------------------------------------------------ if [[ $# == 1 ]]; then COMMAND=$1 else funcUsing fi ### ------------------------------------------------------------------------------------------------ ### Main process ### ------------------------------------------------------------------------------------------------ case ${COMMAND} in help) funcUsing ;; start) funcStart ;; start_systemctl) funcStart systemctl ;; restart) funcRestart ;; stop) funcStop ;; status) funcStatus ;; log) TODAY=`date +%Y%m%d` cd /work/appl/OBCon_SCADA tail -f logs/obcon_proxy_${TODAY}_* | grep -v 'logs/' ;; watchdog) funcWatchdog /usr/bin/sleep 10 funcWatchdog /usr/bin/sleep 10 funcWatchdog /usr/bin/sleep 10 funcWatchdog /usr/bin/sleep 10 funcWatchdog /usr/bin/sleep 10 funcWatchdog ;; *) funcUsing ;; esac echo " " exit 0 ### ================================================================================================