1 #!/bin/bash2 #3 # chkconfig: 2345 58 74
4 # description: my_SERVICE_NAME is a my Service5 #6
7 # common function
8 . /etc/init.d/functions9
10 # service bash flag11 IVMS_SERVICE=0
12
13 CORE_DUMP_DIR=/var/my_core14 DAEMON_COREFILE_LIMIT=unlimited15 SVC_SYS_DIR=/etc/init.d16
17 SVC_PROG=my_SERVICE_PROG18 SVC_NAME=my_SERVICE_NAME19 SVC_DIR=my_SERVICE_DIR20 SVC_LOCK_FILE=/var/lock/subsys/$SVC_PROG21 SVC_PID_FILE=/var/run/$SVC_NAME.pid22
23 # install service, $1 service name, $2executable name24 InstallSvc()25 {26 if [ -z "$1" ]; then
27 echo $"service name is needed by myservice."
28 return -1
29 fi
30
31 SVC_NAME=$1
32 SVC_PROG=${2:-$SVC_NAME}33 SVC_DIR=`pwd`34 SVC_SYS_FILE=$SVC_SYS_DIR/$SVC_NAME35
36 if [ ! -f $SVC_DIR/$SVC_PROG ]; then
37 echo $"$SVC_DIR/$SVC_PROG does not exist."
38 return -1
39 fi
40
41 echo $"installing $SVC_NAME service, executable file $SVC_DIR/$SVC_PROG ..."
42
43 # set suid_dumpable on44 if [ -e /proc/sys/kernel/suid_dumpable ]; then
45 echo 1 > /proc/sys/kernel/suid_dumpable46 else
47 echo 1 > /proc/sys/fs/suid_dumpable48 fi
49
50 # create core directory51 if [ -d $CORE_DUMP_DIR ]; then
52 echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern53 else
54 mkdir$CORE_DUMP_DIR55 echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern56 fi
57
58 # config sysctl to enable core59 grep "$CORE_DUMP_DIR/core-%e-%p-%t" /etc/sysctl.conf60 if [ $? -ne 0 ]; then
61 echo $"fs.suid_dumpable = 1" >> /etc/sysctl.conf62 echo $"kernel.core_pattern = $CORE_DUMP_DIR/core-%e-%p-%t" >> /etc/sysctl.conf63 fi
64
65 # create service bash66 sed -e "s%my_SERVICE=0%my_SERVICE=1%g" $0 |67 sed -e "s%my_SERVICE_PROG%$SVC_PROG%g" |68 sed -e "s%my_SERVICE_NAME%$SVC_NAME%g" |69 sed -e "s%my_SERVICE_DIR%$SVC_DIR%g" >$SVC_SYS_FILE70
71 chmod u+x $SVC_SYS_FILE72 chmod u+x $SVC_DIR/$SVC_PROG73 chkconfig --add $SVC_NAME74
75 echo $"install $SVC_NAME service successfully."
76 return 0
77 }78
79 # uninstall service, $1service name80 UninstallSvc()81 {82 if [ -z "$1" ]; then
83 echo $"service name is needed by myservice."
84 return -1
85 fi
86
87 SVC_NAME=$1
88 SVC_SYS_FILE=$SVC_SYS_DIR/$SVC_NAME89
90 echo $"uninstalling $SVC_NAME service ..."
91
92 # rmservice bash93 if [ -f $SVC_SYS_FILE ]; then
94 chkconfig --del $SVC_NAME95 rm -f $SVC_SYS_FILE96 else
97 warning $"$SVC_NAME service does not exist."
98 fi
99
100 echo $"uninstall $SVC_NAME service successfully."
101 return 0
102 }103
104 # start service105 StartSvc()106 {107 echo $"starting $SVC_NAME service ..."
108
109 # set core unlimited, replaced by DAEMON_COREFILE_LIMIT110 #ulimit -c unlimited111
112 # create lockfile, run program113 touch$SVC_LOCK_FILE114 cd $SVC_DIR115 daemon --pidfile=$SVC_PID_FILE $SVC_DIR/$SVC_PROG -service116 if [ $? -eq 0 ]; then
117 # created by the program118 #pidof $SVC_DIR/$SVC_PROG >$SVC_PID_FILE119 echo $"start $SVC_NAME service successfully."
120 return 0
121 else
122 echo $"start $SVC_NAME service failure."
123 return -1
124 fi
125 }126
127 # get service status128 IsSvcRunning()129 {130 local pid131 __pids_var_run $SVC_NAME $SVC_PID_FILE132 [ -n "$pid" ] && return 0 || return 1
133 }134
135 # stop service136 StopSvc()137 {138 echo $"stopping $SVC_NAME service ..."
139
140 # remove lockfile
141 rm -f $SVC_LOCK_FILE142
143 # wait forexit144 local i RC145 for (( i = 0; i < 10; i++ )); do
146 if IsSvcRunning; then
147 sleep 1
148 else
149 break150 fi
151 done
152
153 if [ $i -eq 10 ] && IsSvcRunning; then
154 killproc -p $SVC_PID_FILE $SVC_NAME155 RC=$?
156 else
157 rm -f $SVC_PID_FILE158 RC=0
159 fi
160
161 if [ $RC -eq 0 ]; then
162 echo $"stop $SVC_NAME service successfully."
163 return 0
164 else
165 echo $"stop $SVC_NAME service failure."
166 return -1
167 fi
168 }169
170 # restart service171 RestartSvc()172 {173 echo $"restarting $SVC_NAME service ..."
174
175 StopSvc176 if [ $? -eq 0 ]; then
177 StartSvc178 if [ $? -eq 0 ]; then
179 echo $"restart $SVC_NAME service successfully."
180 return 0
181 fi
182 fi
183
184 echo $"restart $SVC_NAME service failure."
185 return -1
186 }187
188 RETVAL=0
189
190 if [ $IVMS_SERVICE -eq 0 ]; then
191 # setup192 case $1 in
193 install |i)194 InstallSvc $2 $3
195 RETVAL=$?
196 ;;197 uninstall |u)198 UninstallSvc $2
199 RETVAL=$?
200 ;;201 *)202 echo $"Usage: $0 {i, install NAME [EXEC] | u, uninstall NAME}"
203 ;;204 esac
205 else
206 # service207 case $1 in
208 start |r)209 StartSvc210 RETVAL=$?
211 ;;212 stop |p)213 StopSvc214 RETVAL=$?
215 ;;216 restart |e)217 RestartSvc218 RETVAL=$?
219 ;;220 status |s)221 status -p $SVC_PID_FILE $SVC_NAME222 RETVAL=$?
223 ;;224 status2)225 IsSvcRunning && echo $"$SVC_NAME service is running." || echo $"$SVC_NAME service has been stopped."
226 ;;227 *)228 echo $$"Usage: $0 {start|stop|status|restart}"
229 ;;230 esac
231 fi
232
233 exit $RETVAL