File size: 5,563 Bytes
d6dbc7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/usr/bin/env bash
### ================================================================================================
###     프로그램 명                     : cmsctl.bash, Version 0.00.010
###     프로그램 설명                   : OBCon CMS를 관리 한다.
###     작성자                          : 산사랑 (pnuskgh@gmail.com, 010-5034-3931)
###     작성일                          : 2018.10.19 ~ 2019.10.30
### ----[History 관리]------------------------------------------------------------------------------
###     수정자                          :
###     수정일                          :
###     수정 내용                       :
### --- [Copyright] --------------------------------------------------------------------------------
###     Copyright (c) 1995~2019 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_CMS="/work/appl/obcon"
NODE=`which node`
# NODE='/root/.nvm/versions/node/v12.13.1/bin/node'

PROC_NAME="OBCon CMS Service"
PROC_STR="${NODE} ${HOME_CMS}/bin/cms.js --conf config_cms_override.js"
JOB_LOG="${HOME_CMS}/logs/watchdog_cms.log"
TIMESTAMP=`date +%Y%m%d_%H%M%S`

### ------------------------------------------------------------------------------------------------
###     사용법을 표시 합니다.
### ------------------------------------------------------------------------------------------------
funcUsing() {
    echo "Using : cmdctl.bash COMMAND [OPTIONS]"
    echo "        COMMAND              : help, start, restart, stop, status, watchdog"
    echo " "
    exit 2
}

### ------------------------------------------------------------------------------------------------
###     OBCon CMS Service 관리 함수
### ------------------------------------------------------------------------------------------------
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_CMS}
        if [[ "${OPT}" == "systemctl" ]]; then
            ${NODE} /work/appl/obcon/bin/cms.js --conf config_cms_override.js > /dev/null 2>&1 &
        else
            /bin/nohup ${NODE} /work/appl/obcon/bin/cms.js --conf config_cms_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/cmsctl.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 CMS server 기동 : ${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
        ;;
    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
### ================================================================================================