linux 服务脚本

  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

 

posted on 2019-02-21 14:16  lijianbo  阅读(249)  评论(0编辑  收藏  举报

导航