merged cont.
[opensuse:yast-rest-service.git] / webservice / package / yastws
1 #!/bin/sh
2 #
3 #     Copyright (C) 1995--2007  Marcus Rückert, SUSE / Novell Inc.
4 #          
5 #     This library is free software; you can redistribute it and/or modify it
6 #     under the terms of the GNU Lesser General Public License as published by
7 #     the Free Software Foundation; either version 2.1 of the License, or (at
8 #     your option) any later version.
9 #                             
10 #     This library is distributed in the hope that it will be useful, but
11 #     WITHOUT ANY WARRANTY; without even the implied warranty of
12 #     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 #     Lesser General Public License for more details.
14 #      
15 #     You should have received a copy of the GNU Lesser General Public
16 #     License along with this library; if not, write to the Free Software
17 #     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
18 #     USA.
19 #
20 # /etc/init.d/yastws
21 #   and its symbolic link
22 # /(usr/)sbin/rcyastws
23 #
24 #
25 # LSB compatible service control script; see http://www.linuxbase.org/spec/
26
27 # Note: This template uses functions rc_XXX defined in /etc/rc.status on
28 # UnitedLinux/SUSE/Novell based Linux distributions. If you want to base your
29 # script on this template and ensure that it works on non UL based LSB 
30 # compliant Linux distributions, you either have to provide the rc.status
31 # functions from UL or change the script to work without them.
32 # See skeleton.compat for a template that works with other distros as well.
33 #
34 ### BEGIN INIT INFO
35 # Provides:          yastws
36 # Required-Start:    $syslog $remote_fs
37 # Should-Start: $time ypbind sendmail yastwc
38 # Required-Stop:     $syslog $remote_fs
39 # Should-Stop: $time ypbind sendmail yastwc
40 # Default-Start:     3 5
41 # Default-Stop:      0 1 2 6
42 # Short-Description: yastws
43 # Description:       Start yastws
44 ### END INIT INFO
45
46 # Any extensions to the keywords given above should be preceeded by 
47 # X-VendorTag- (X-UnitedLinux- X-SuSE- for us) according to LSB.
48
49 # Notes on Required-Start/Should-Start:
50 # * There are two different issues that are solved by Required-Start
51 #    and Should-Start
52 # (a) Hard dependencies: This is used by the runlevel editor to determine
53 #     which services absolutely need to be started to make the start of
54 #     this service make sense. Example: nfsserver should have
55 #     Required-Start: $portmap
56 #     Also, required services are started before the dependent ones.
57 #     The runlevel editor will warn about such missing hard dependencies
58 #     and suggest enabling. During system startup, you may expect an error,
59 #     if the dependency is not fulfilled.
60 # (b) Specifying the init script ordering, not real (hard) dependencies.
61 #     This is needed by insserv to determine which service should be
62 #     started first (and at a later stage what services can be started
63 #     in parallel). The tag Should-Start: is used for this.
64 #     It tells, that if a service is available, it should be started
65 #     before. If not, never mind.
66 # * When specifying hard dependencies or ordering requirements, you can 
67 #   use names of services (contents of their Provides: section)
68 #   or pseudo names starting with a $. The following ones are available
69 #   according to LSB (1.1):
70 #       $local_fs               all local file systems are mounted
71 #                               (most services should need this!)
72 #       $remote_fs              all remote file systems are mounted
73 #                               (note that /usr may be remote, so
74 #                                many services should Require this!)
75 #       $syslog                 system logging facility up
76 #       $network                low level networking (eth card, ...)
77 #       $named                  hostname resolution available
78 #       $netdaemons             all network daemons are running
79 #   The $netdaemons pseudo service has been removed in LSB 1.2.
80 #   For now, we still offer it for backward compatibility.
81 #   These are new (LSB 1.2):
82 #       $time                   the system time has been set correctly  
83 #       $portmap                SunRPC portmapping service available
84 #   UnitedLinux extensions:
85 #       $ALL                    indicates that a script should be inserted
86 #                               at the end
87 # * The services specified in the stop tags 
88 #   (Required-Stop/Should-Stop)
89 #   specify which services need to be still running when this service
90 #   is shut down. Often the entries there are just copies or a subset 
91 #   from the respective start tag.
92 # * Should-Start/Stop are now part of LSB as of 2.0,
93 #   formerly SUSE/Unitedlinux used X-UnitedLinux-Should-Start/-Stop.
94 #   insserv does support both variants.
95 # * X-UnitedLinux-Default-Enabled: yes/no is used at installation time
96 #   (%fillup_and_insserv macro in %post of many RPMs) to specify whether
97 #   a startup script should default to be enabled after installation.
98 #   It's not used by insserv.
99 #
100 # Note on runlevels:
101 # 0 - halt/poweroff                     6 - reboot
102 # 1 - single user                       2 - multiuser without network exported
103 # 3 - multiuser w/ network (text mode)  5 - multiuser w/ network and X11 (xdm)
104
105 # Note on script names:
106 # http://www.linuxbase.org/spec/refspecs/LSB_1.3.0/gLSB/gLSB/scrptnames.html
107 # A registry has been set up to manage the init script namespace.
108 # http://www.lanana.org/
109 # Please use the names already registered or register one or use a
110 # vendor prefix.
111
112
113 # Check for missing binaries (stale symlinks should not happen)
114 # Note: Special treatment of stop for LSB conformance
115 NGINX_BIN=/usr/sbin/nginx
116 test -x $NGINX_BIN || { echo "$NGINX_BIN not installed"; 
117         if [ "$1" = "stop" ]; then exit 0;
118         else exit 5; fi; }
119
120 # Check for existence of needed config file and read it
121 NGINX_CONFIG=/etc/yastws/nginx.conf
122 test -r $NGINX_CONFIG || { echo "$NGINX_CONFIG not existing";
123         if [ "$1" = "stop" ]; then exit 0;
124         else exit 6; fi; }
125
126 PID_FILE=/var/run/yastws.pid
127
128 # Source LSB init functions
129 # providing start_daemon, killproc, pidofproc, 
130 # log_success_msg, log_failure_msg and log_warning_msg.
131 # This is currently not used by UnitedLinux based distributions and
132 # not needed for init scripts for UnitedLinux only. If it is used,
133 # the functions from rc.status should not be sourced or used.
134 #. /lib/lsb/init-functions
135
136 # Shell functions sourced from /etc/rc.status:
137 #      rc_check         check and set local and overall rc status
138 #      rc_status        check and set local and overall rc status
139 #      rc_status -v     be verbose in local rc status and clear it afterwards
140 #      rc_status -v -r  ditto and clear both the local and overall rc status
141 #      rc_status -s     display "skipped" and exit with status 3
142 #      rc_status -u     display "unused" and exit with status 3
143 #      rc_failed        set local and overall rc status to failed
144 #      rc_failed <num>  set local and overall rc status to <num>
145 #      rc_reset         clear both the local and overall rc status
146 #      rc_exit          exit appropriate to overall rc status
147 #      rc_active        checks whether a service is activated by symlinks
148 . /etc/rc.status
149
150 # Reset status of this service
151 rc_reset
152
153 # Return values acc. to LSB for all commands but status:
154 # 0       - success
155 # 1       - generic or unspecified error
156 # 2       - invalid or excess argument(s)
157 # 3       - unimplemented feature (e.g. "reload")
158 # 4       - user had insufficient privileges
159 # 5       - program is not installed
160 # 6       - program is not configured
161 # 7       - program is not running
162 # 8--199  - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
163
164 # Note that starting an already running service, stopping
165 # or restarting a not-running service as well as the restart
166 # with force-reload (in case signaling is not supported) are
167 # considered a success.
168
169 case "$1" in
170     start)
171        echo -n "Starting yastws "
172   #generate deployment specific secret key (bnc#591345)
173   SECRET=`cd /srv/www/yastws/ && rake -s secret`
174   if [ -z $SECRET ]; then
175     echo -n "Can generate secret for session. Run 'cd /srv/www/yastws/ && rake -s secret' for details."
176     rc_failed
177     rc_status -v
178     rc_exit
179   fi
180   sed -i 's/9d11bfc98abcf9799082d9c34ec94dc1cc926f0f1bf4bea8c440b497d96b14c1f712c8784d0303ee7dd69e382c3e5e4d38d4c56d1b619eae7acaa6516cd733b1/'"$SECRET"/ /srv/www/yastws/config/environment.rb
181
182         # patch passenger config root if the current config is different (after updating passenger or on a different arch than the default)
183         grep -q "^[ \\t]*passenger_root[ \\t][ \\t]*`passenger-config --root`;" $NGINX_CONFIG ||
184             sed -i.bak "s#^\\([ \\t]*\\)passenger_root[ \\t].*\$#\\1passenger_root `passenger-config --root`;#" $NGINX_CONFIG
185
186         ## Start daemon with startproc(8). If this fails
187         ## the return value is set appropriately by startproc.
188         /sbin/startproc -p $PID_FILE $NGINX_BIN -c $NGINX_CONFIG
189
190         # Remember status and be verbose
191         rc_status -v
192         ;;
193     stop)
194         echo -n "Shutting down yastws "
195         ## Stop daemon with killproc(8) and if this fails
196         ## killproc sets the return value according to LSB.
197
198         /sbin/killproc -TERM -p $PID_FILE $NGINX_BIN
199
200         # Remember status and be verbose
201         rc_status -v
202         ;;
203     try-restart|condrestart)
204         ## Do a restart only if the service was active before.
205         ## Note: try-restart is now part of LSB (as of 1.9).
206         ## RH has a similar command named condrestart.
207         if test "$1" = "condrestart"; then
208                 echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
209         fi
210         $0 status
211         if test $? = 0; then
212                 $0 restart
213         else
214                 rc_reset        # Not running is not a failure.
215         fi
216         # Remember status and be quiet
217         rc_status
218         ;;
219     restart)
220         ## Stop the service and regardless of whether it was
221         ## running or not, start it again.
222         $0 stop
223         $0 start
224
225         # Remember status and be quiet
226         rc_status
227         ;;
228     force-reload)
229         ## Signal the daemon to reload its config. Most daemons
230         ## do this on signal 1 (SIGHUP).
231         ## If it does not support it, restart the service if it
232         ## is running.
233
234         echo -n "Reload service yastws "
235         ## if it supports it:
236         /sbin/killproc -p $PID_FILE -HUP $NGINX_BIN
237         rc_status -v
238
239         ## Otherwise:
240         #$0 try-restart
241         #rc_status
242         ;;
243     reload)
244         ## Like force-reload, but if daemon does not support
245         ## signaling, do nothing (!)
246
247         # If it supports signaling:
248         echo -n "Reload service yastws "
249         /sbin/killproc -HUP -p $PID_FILE $NGINX_BIN
250         #touch /var/run/yastws.pid
251         rc_status -v
252         
253         ## Otherwise if it does not support reload:
254         #rc_failed 3
255         #rc_status -v
256         ;;
257     status)
258         echo -n "Checking for service yastws "
259         ## Check status with checkproc(8), if process is running
260         ## checkproc will return with exit status 0.
261
262         # Return value is slightly different for the status command:
263         # 0 - service up and running
264         # 1 - service dead, but /var/run/  pid  file exists
265         # 2 - service dead, but /var/lock/ lock file exists
266         # 3 - service not running (unused)
267         # 4 - service status unknown :-(
268         # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
269         
270         # NOTE: checkproc returns LSB compliant status values.
271         /sbin/checkproc -p $PID_FILE $NGINX_BIN
272         # NOTE: rc_status knows that we called this init script with
273         # "status" option and adapts its messages accordingly.
274         rc_status -v
275         ;;
276     probe)
277         ## Optional: Probe for the necessity of a reload, print out the
278         ## argument to this init script which is required for a reload.
279         ## Note: probe is not (yet) part of LSB (as of 1.9)
280
281         test $NGINX_CONFIG /var/run/yastws.pid && echo reload
282         ;;
283     *)
284         echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
285         exit 1
286         ;;
287 esac
288 rc_exit