1 #!/bin/bash
2 #
3 # chkconfig: 2345 58 74
4 # description: my_SERVICE_NAME is a my Service
5 #
6
7 # common function
8 . /etc/init.d/functions
9
10 # service bash flag
11 IVMS_SERVICE=0
12
13 CORE_DUMP_DIR=/var/my_core
14 DAEMON_COREFILE_LIMIT=unlimited
15 SVC_SYS_DIR=/etc/init.d
16
17 SVC_PROG=my_SERVICE_PROG
18 SVC_NAME=my_SERVICE_NAME
19 SVC_DIR=my_SERVICE_DIR
20 SVC_LOCK_FILE=/var/lock/subsys/$SVC_PROG
21 SVC_PID_FILE=/var/run/$SVC_NAME.pid
22
23 # install service, $1 service name, $2 executable name
24 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_NAME
35
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 on
44 if [ -e /proc/sys/kernel/suid_dumpable ]; then
45 echo 1 > /proc/sys/kernel/suid_dumpable
46 else
47 echo 1 > /proc/sys/fs/suid_dumpable
48 fi
49
50 # create core directory
51 if [ -d $CORE_DUMP_DIR ]; then
52 echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
53 else
54 mkdir $CORE_DUMP_DIR
55 echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
56 fi
57
58 # config sysctl to enable core
59 grep "$CORE_DUMP_DIR/core-%e-%p-%t" /etc/sysctl.conf
60 if [ $? -ne 0 ]; then
61 echo $"fs.suid_dumpable = 1" >> /etc/sysctl.conf
62 echo $"kernel.core_pattern = $CORE_DUMP_DIR/core-%e-%p-%t" >> /etc/sysctl.conf
63 fi
64
65 # create service bash
66 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_FILE
70
71 chmod u+x $SVC_SYS_FILE
72 chmod u+x $SVC_DIR/$SVC_PROG
73 chkconfig --add $SVC_NAME
74
75 echo $"install $SVC_NAME service successfully."
76 return 0
77 }
78
79 # uninstall service, $1 service name
80 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_NAME
89
90 echo $"uninstalling $SVC_NAME service ..."
91
92 # rm service bash
93 if [ -f $SVC_SYS_FILE ]; then
94 chkconfig --del $SVC_NAME
95 rm -f $SVC_SYS_FILE
96 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 service
105 StartSvc()
106 {
107 echo $"starting $SVC_NAME service ..."
108
109 # set core unlimited, replaced by DAEMON_COREFILE_LIMIT
110 #ulimit -c unlimited
111
112 # create lockfile, run program
113 touch $SVC_LOCK_FILE
114 cd $SVC_DIR
115 daemon --pidfile=$SVC_PID_FILE $SVC_DIR/$SVC_PROG -service
116 if [ $? -eq 0 ]; then
117 # created by the program
118 #pidof $SVC_DIR/$SVC_PROG > $SVC_PID_FILE
119 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 status
128 IsSvcRunning()
129 {
130 local pid
131 __pids_var_run $SVC_NAME $SVC_PID_FILE
132 [ -n "$pid" ] && return 0 || return 1
133 }
134
135 # stop service
136 StopSvc()
137 {
138 echo $"stopping $SVC_NAME service ..."
139
140 # remove lockfile
141 rm -f $SVC_LOCK_FILE
142
143 # wait for exit
144 local i RC
145 for (( i = 0; i < 10; i++ )); do
146 if IsSvcRunning; then
147 sleep 1
148 else
149 break
150 fi
151 done
152
153 if [ $i -eq 10 ] && IsSvcRunning; then
154 killproc -p $SVC_PID_FILE $SVC_NAME
155 RC=$?
156 else
157 rm -f $SVC_PID_FILE
158 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 service
171 RestartSvc()
172 {
173 echo $"restarting $SVC_NAME service ..."
174
175 StopSvc
176 if [ $? -eq 0 ]; then
177 StartSvc
178 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 # setup
192 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 # service
207 case $1 in
208 start | r)
209 StartSvc
210 RETVAL=$?
211 ;;
212 stop | p)
213 StopSvc
214 RETVAL=$?
215 ;;
216 restart | e)
217 RestartSvc
218 RETVAL=$?
219 ;;
220 status | s)
221 status -p $SVC_PID_FILE $SVC_NAME
222 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