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