반응형
프로프레임에서 사용하는 dlupdate 는 정말 유용하다. 유닉스C 에서 자바에서와 같이 실시간 모듈이 동적으로 반영될 수 있기 때문이다. 이렇게 dlupdate 된 모듈이 잘 메모리에 적재가 되었는 지 체크하는 쉘이 있어 소개한다.
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 |
pt_msg ()
{
echo "\t $@"
}
err_msg ()
{
echo "\t (E) $@"
}
warn_msg ()
{
echo "\t (W) $@"
}
check_dlupdate_library()
{
IN_FILE_FULL_NM=$1
IN_FUNC_NM=`basename $IN_FILE_FULL_NM .so | cut -b4-`
# chek argument
if [ `echo "$IN_FILE_FULL_NM" | grep "^/" | wc -l` -ne 1 ]; then
err_msg "input 파일명은 전체경로(full path)를 입력해야 합니다."
exit 1
fi
if [ ! -f "$IN_FILE_FULL_NM" ]; then
err_msg "입력파일이 존재하지 않습니다."
exit 1
fi
echo " o Checking ... $IN_FILE_FULL_NM "
# shared object
file $IN_FILE_FULL_NM | grep "64-bit XCOFF executable" > /dev/null 2> /dev/null
if [ $? -ne 0 ]; then
err_msg "해당 파일은 64 shared object file 이 아닙니다."
err_msg "(조치) rm -f $TDLDIR/mod/$IN_FUNC_NM.so"
exit 2
else
pt_msg "(정상항목) 64 shared object file 입니다. "
fi
# tdl seq check
TDL_SEQ=`tdlshm -M $IN_FUNC_NM | grep "Libname" | awk '{printf "%s\n", $12}'|sort|uniq|cut -d, -f1`
if [[ $? -ne 0 || $TDL_SEQ = "" ]]; then
warn_msg "해당 파일은 현재 DLUPDATE 되어 있지 않습니다."
warn_msg "일반 배치프로그램인 경우에는 하지 않으셔도 됩니다."
warn_msg "만일 서비스나 2PC 배치, 상주배치인 경우 아래의 조치를 취하세요"
warn_msg "(조치) 1. tdlinit 이 되어 있는지 확인하십시요"
warn_msg "(조치) 2. dlupdate $IN_FILE_FULL_NM"
exit 3
else
pt_msg "(정상항목) 현재 dlupdate 되어 있습니다. "
fi
# compare library
sum1=`sum -r $IN_FILE_FULL_NM | awk '{print $1}'`
sum2=`sum -r $TDL_RUN_DIR/$IN_FUNC_NM.$TDL_SEQ | awk '{print $1}'`
if [ $sum1 -ne $sum2 ]; then
err_msg "DLCALL 과 RELEASE 된 LIBRARY 가 다릅니다. "
ls -l $IN_FILE_FULL_NM
ls -l $TDL_RUN_DIR/$IN_FUNC_NM.$TDL_SEQ
err_msg "(조치) dlupdate $IN_FILE_FULL_NM"
exit 4
else
pt_msg "(정상항목) DLCALL 과 RELEASE 된 라이브러리가 동일합니다. "
fi
# compare symboic link
if [ ! -h "$TDL_LNK_DIR/$IN_FUNC_NM.so" ]; then
err_msg " [$TDL_LNK_DIR] 에 symboic link 가 존재하지 않습니다"
err_msg "(조치) ln -s $IN_FILE_FULL_NM $TDL_LNK_DIR/$IN_FUNC_NM.so"
exit 5
else
pt_msg "(정상항목) [$TDL_LNK_DIR] 에 symboic link 가 존재합니다"
fi
# link 가 지정하는 라이브러리 체크
LINK_FILE_INFO=`ls -l $TDL_LNK_DIR/$IN_FUNC_NM.so 2> /dev/null | awk '{ print $NF } '`
if [[ $? -ne 0 || "$IN_FILE_FULL_NM" != "$LINK_FILE_INFO" ]]; then
err_msg "symboic link 와 입력된 library의 위치가 일치하지 않습니다."
err_msg "(조치) rm -f $TDL_LNK_DIR/$IN_FUNC_NM.so"
err_msg "(조치) ln -s $IN_FILE_FULL_NM $TDL_LNK_DIR/$IN_FUNC_NM.so"
ls -l $TDL_LNK_DIR/$IN_FUNC_NM.so
exit 6
else
pt_msg "(정상항목) symboic link 와 입력된 library 의 위치가 동일합니다. "
fi
# symbol check
c=`nm -g $TDL_RUN_DIR/$IN_FUNC_NM.$TDL_SEQ | grep $IN_FUNC_NM | grep " D " | wc -l`
if [ $c -eq 0 ]; then
err_msg "library 의 dlcall symbol 명이 존재하지 않습니다."
err_msg "(조치) nm -g $IN_FILE_FULL_NM 에 $IN_FUNC_NM 이 존재하여야 합니다."
err_msg "(조치) 소스 파일을 확인해 보시기 바랍니다."
exit 8
else
pt_msg "(정상항목) dlcall symbol 명이 ($c)건 정상적으로 존재합니다"
fi
}
# **************************************************************************************************
####################################################################################################
if [ $# -eq 0 ]; then
runfilename=${0##*/}
echo " "
echo " USAGE: $runfilename LIBRARY_FULL_PATH"
echo " "
exit -1
fi
# set env
if [ "$TDLDIR" = "" ]; then
err_msg "환경변수 TDLDIR 이 정의되어 있지 않습니다. "
exit -10
fi
TDL_RUN_DIR="${TDLDIR}/run"
TDL_LNK_DIR="${TDLDIR}/mod"
# **************************************************************************************************
# set argument
for args
do
check_dlupdate_library $args
pt_msg " o dlupdate 검증 종료 "
done
exit 0
|
cs |
[프로프레임 3.0 @ AIX 7.1] 에 맞춰져 있다. 다른 OS 라면 약간의 수정이 필요할 것이다.
반응형
'컴퓨터활용 > 프로프레임' 카테고리의 다른 글
[프로프레임] Conditions can't call the right function (1) | 2019.08.03 |
---|---|
[프로프레임] 서비스로그 추출 쉘 (0) | 2017.07.30 |
[프로프레임] 거래전문 추출 Pro*C (0) | 2017.06.08 |
[프로프레임] tdlinit.sh (0) | 2017.05.24 |
[프로프레임3.0] tmconfig.m 을 통한 서버 일괄 빌드 (0) | 2017.03.17 |