VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/vboxballoonctrl-service.sh@ 46757

Last change on this file since 46757 was 44336, checked in by vboxsync, 12 years ago

Frontends/VBoxBalloonCtrl: add logic to prevent deflating the balloon if there is not sufficient host memory free, add docs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.9 KB
Line 
1#!/bin/sh
2#
3# VirtualBox watchdog daemon init script.
4#
5# Copyright (C) 2006-2013 Oracle Corporation
6#
7# This file is part of VirtualBox Open Source Edition (OSE), as
8# available from http://www.virtualbox.org. This file is free software;
9# you can redistribute it and/or modify it under the terms of the GNU
10# General Public License (GPL) as published by the Free Software
11# Foundation, in version 2 as it comes in the "COPYING" file of the
12# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
13# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
14#
15
16# chkconfig: 35 35 65
17# description: VirtualBox watchdog daemon
18#
19### BEGIN INIT INFO
20# Provides: vboxballoonctrl-service
21# Required-Start: vboxdrv
22# Required-Stop: vboxdrv
23# Default-Start: 2 3 4 5
24# Default-Stop: 0 1 6
25# Description: VirtualBox watchdog daemon
26### END INIT INFO
27
28PATH=$PATH:/bin:/sbin:/usr/sbin
29
30[ -f /lib/lsb/init-functions -a -f /etc/debian_release ] || NOLSB=yes
31[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
32
33if [ -n "$INSTALL_DIR" ]; then
34 binary="$INSTALL_DIR/VBoxBalloonCtrl"
35else
36 binary="/usr/lib/virtualbox/VBoxBalloonCtrl"
37fi
38
39# silently exit if the package was uninstalled but not purged,
40# applies to Debian packages only (but shouldn't hurt elsewhere)
41[ ! -f /etc/debian_release -o -x $binary ] || exit 0
42
43[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
44
45system=unknown
46if [ -f /etc/redhat-release ]; then
47 system=redhat
48 PIDFILE="/var/lock/subsys/vboxballoonctrl-service"
49elif [ -f /etc/SuSE-release ]; then
50 system=suse
51 PIDFILE="/var/lock/subsys/vboxballoonctrl-service"
52elif [ -f /etc/debian_version ]; then
53 system=debian
54 PIDFILE="/var/run/vboxballoonctrl-service"
55elif [ -f /etc/gentoo-release ]; then
56 system=gentoo
57 PIDFILE="/var/run/vboxballoonctrl-service"
58elif [ -f /etc/arch-release ]; then
59 system=arch
60 PIDFILE="/var/run/vboxballoonctrl-service"
61elif [ -f /etc/slackware-version ]; then
62 system=slackware
63 PIDFILE="/var/run/vboxballoonctrl-service"
64elif [ -f /etc/lfs-release ]; then
65 system=lfs
66 PIDFILE="/var/run/vboxballoonctrl-service.pid"
67else
68 system=other
69 if [ -d /var/run -a -w /var/run ]; then
70 PIDFILE="/var/run/vboxballoonctrl-service"
71 fi
72fi
73
74if [ -z "$NOLSB" ]; then
75 . /lib/lsb/init-functions
76 fail_msg() {
77 echo ""
78 log_failure_msg "$1"
79 }
80 succ_msg() {
81 log_success_msg " done."
82 }
83 begin_msg() {
84 log_daemon_msg "$@"
85 }
86fi
87
88if [ "$system" = "redhat" ]; then
89 . /etc/init.d/functions
90 if [ -n "$NOLSB" ]; then
91 start_daemon() {
92 usr="$1"
93 shift
94 daemon --user $usr $@
95 }
96 fail_msg() {
97 echo_failure
98 echo
99 }
100 succ_msg() {
101 echo_success
102 echo
103 }
104 begin_msg() {
105 echo -n "$1"
106 }
107 fi
108fi
109
110if [ "$system" = "suse" ]; then
111 . /etc/rc.status
112 start_daemon() {
113 usr="$1"
114 shift
115 su - $usr -c "$*"
116 }
117 if [ -n "$NOLSB" ]; then
118 fail_msg() {
119 rc_failed 1
120 rc_status -v
121 }
122 succ_msg() {
123 rc_reset
124 rc_status -v
125 }
126 begin_msg() {
127 echo -n "$1"
128 }
129 fi
130fi
131
132if [ "$system" = "debian" ]; then
133 start_daemon() {
134 usr="$1"
135 shift
136 bin="$1"
137 shift
138 start-stop-daemon --background --chuid $usr --start --exec $bin -- $@
139 }
140 killproc() {
141 start-stop-daemon --stop --exec $@
142 }
143 if [ -n "$NOLSB" ]; then
144 fail_msg() {
145 echo " ...fail!"
146 }
147 succ_msg() {
148 echo " ...done."
149 }
150 begin_msg() {
151 echo -n "$1"
152 }
153 fi
154fi
155
156if [ "$system" = "gentoo" ]; then
157 if [ -f /sbin/functions.sh ]; then
158 . /sbin/functions.sh
159 elif [ -f /etc/init.d/functions.sh ]; then
160 . /etc/init.d/functions.sh
161 fi
162 start_daemon() {
163 usr="$1"
164 shift
165 bin="$1"
166 shift
167 start-stop-daemon --background --chuid $usr --start --exec $bin -- $@
168 }
169 killproc() {
170 start-stop-daemon --stop --exec $@
171 }
172 if [ -n "$NOLSB" ]; then
173 fail_msg() {
174 echo " ...fail!"
175 }
176 succ_msg() {
177 echo " ...done."
178 }
179 begin_msg() {
180 echo -n "$1"
181 }
182 if [ "`which $0`" = "/sbin/rc" ]; then
183 shift
184 fi
185 fi
186fi
187
188if [ "$system" = "arch" ]; then
189 USECOLOR=yes
190 . /etc/rc.d/functions
191 start_daemon() {
192 usr="$1"
193 shift
194 su - $usr -c "$*"
195 test $? -eq 0 && add_daemon rc.`basename $2`
196 }
197 killproc() {
198 killall $@
199 rm_daemon `basename $@`
200 }
201 if [ -n "$NOLSB" ]; then
202 fail_msg() {
203 stat_fail
204 }
205 succ_msg() {
206 stat_done
207 }
208 begin_msg() {
209 stat_busy "$1"
210 }
211 fi
212fi
213
214if [ "$system" = "slackware" ]; then
215 killproc() {
216 killall $1
217 rm -f $PIDFILE
218 }
219 if [ -n "$NOLSB" ]; then
220 fail_msg() {
221 echo " ...fail!"
222 }
223 succ_msg() {
224 echo " ...done."
225 }
226 begin_msg() {
227 echo -n "$1"
228 }
229 fi
230 start_daemon() {
231 usr="$1"
232 shift
233 su - $usr -c "$*"
234 }
235fi
236
237if [ "$system" = "lfs" ]; then
238 . /etc/rc.d/init.d/functions
239 if [ -n "$NOLSB" ]; then
240 fail_msg() {
241 echo_failure
242 }
243 succ_msg() {
244 echo_ok
245 }
246 begin_msg() {
247 echo $1
248 }
249 fi
250 start_daemon() {
251 usr="$1"
252 shift
253 su - $usr -c "$*"
254 }
255 status() {
256 statusproc $1
257 }
258fi
259
260if [ "$system" = "other" ]; then
261 if [ -n "$NOLSB" ]; then
262 fail_msg() {
263 echo " ...fail!"
264 }
265 succ_msg() {
266 echo " ...done."
267 }
268 begin_msg() {
269 echo -n "$1"
270 }
271 fi
272fi
273
274vboxdrvrunning() {
275 lsmod | grep -q "vboxdrv[^_-]"
276}
277
278check_single_user() {
279 if [ -n "$2" ]; then
280 fail_msg "VBOXWATCHDOG_USER must not contain multiple users!"
281 exit 1
282 fi
283}
284
285start() {
286 if ! test -f $PIDFILE; then
287 [ -z "$VBOXWATCHDOG_USER" -a -z "$VBOXBALLOONCTRL_USER" ] && exit 0
288 [ -z "$VBOXWATCHDOG_USER" ] && VBOXWATCHDOG_USER="$VBOXBALLOONCTRL_USER"
289 begin_msg "Starting VirtualBox watchdog service";
290 check_single_user $VBOXWATCHDOG_USER
291 vboxdrvrunning || {
292 fail_msg "VirtualBox kernel module not loaded!"
293 exit 0
294 }
295 # Handle legacy parameters, do not add any further ones unless absolutely necessary.
296 [ -z "$VBOXWATCHDOG_BALLOON_INTERVAL" -a -n "$VBOXBALLOONCTRL_INTERVAL" ] && VBOXWATCHDOG_BALLOON_INTERVAL="$VBOXBALLOONCTRL_INTERVAL"
297 [ -z "$VBOXWATCHDOG_BALLOON_INCREMENT" -a -n "$VBOXBALLOONCTRL_INCREMENT" ] && VBOXWATCHDOG_BALLOON_INCREMENT="$VBOXBALLOONCTRL_INCREMENT"
298 [ -z "$VBOXWATCHDOG_BALLOON_DECREMENT" -a -n "$VBOXBALLOONCTRL_DECREMENT" ] && VBOXWATCHDOG_BALLOON_DECREMENT="$VBOXBALLOONCTRL_DECREMENT"
299 [ -z "$VBOXWATCHDOG_BALLOON_LOWERLIMIT" -a -n "$VBOXBALLOONCTRL_LOWERLIMIT" ] && VBOXWATCHDOG_BALLOON_LOWERLIMIT="$VBOXBALLOONCTRL_LOWERLIMIT"
300 [ -z "$VBOXWATCHDOG_BALLOON_SAFETYMARGIN" -a -n "$VBOXBALLOONCTRL_SAFETYMARGIN" ] && VBOXWATCHDOG_BALLOON_SAFETYMARGIN="$VBOXBALLOONCTRL_SAFETYMARGIN"
301 [ -z "$VBOXWATCHDOG_ROTATE" -a -n "$VBOXBALLOONCTRL_ROTATE" ] && VBOXWATCHDOG_ROTATE="$VBOXBALLOONCTRL_ROTATE"
302 [ -z "$VBOXWATCHDOG_LOGSIZE" -a -n "$VBOXBALLOONCTRL_LOGSIZE" ] && VBOXWATCHDOG_LOGSIZE="$VBOXBALLOONCTRL_LOGSIZE"
303 [ -z "$VBOXWATCHDOG_LOGINTERVAL" -a -n "$VBOXBALLOONCTRL_LOGINTERVAL" ] && VBOXWATCHDOG_LOGINTERVAL="$VBOXBALLOONCTRL_LOGINTERVAL"
304
305 PARAMS="--background"
306 [ -n "$VBOXWATCHDOG_BALLOON_INTERVAL" ] && PARAMS="$PARAMS --balloon-interval \"$VBOXWATCHDOG_BALLOON_INTERVAL\""
307 [ -n "$VBOXWATCHDOG_BALLOON_INCREMENT" ] && PARAMS="$PARAMS --balloon-inc \"$VBOXWATCHDOG_BALLOON_INCREMENT\""
308 [ -n "$VBOXWATCHDOG_BALLOON_DECREMENT" ] && PARAMS="$PARAMS --balloon-dec \"$VBOXWATCHDOG_BALLOON_DECREMENT\""
309 [ -n "$VBOXWATCHDOG_BALLOON_LOWERLIMIT" ] && PARAMS="$PARAMS --balloon-lower-limit \"$VBOXWATCHDOG_BALLOON_LOWERLIMIT\""
310 [ -n "$VBOXWATCHDOG_BALLOON_SAFETYMARGIN" ] && PARAMS="$PARAMS --balloon-safety-margin \"$VBOXWATCHDOG_BALLOON_SAFETYMARGIN\""
311 [ -n "$VBOXWATCHDOG_ROTATE" ] && PARAMS="$PARAMS -R \"$VBOXWATCHDOG_ROTATE\""
312 [ -n "$VBOXWATCHDOG_LOGSIZE" ] && PARAMS="$PARAMS -S \"$VBOXWATCHDOG_LOGSIZE\""
313 [ -n "$VBOXWATCHDOG_LOGINTERVAL" ] && PARAMS="$PARAMS -I \"$VBOXWATCHDOG_LOGINTERVAL\""
314 # prevent inheriting this setting to VBoxSVC
315 unset VBOX_RELEASE_LOG_DEST
316 start_daemon $VBOXWATCHDOG_USER $binary $PARAMS > /dev/null 2>&1
317 # ugly: wait until the final process has forked
318 sleep .1
319 PID=`pidof $binary 2>/dev/null`
320 if [ -n "$PID" ]; then
321 echo "$PID" > $PIDFILE
322 RETVAL=0
323 succ_msg
324 else
325 RETVAL=1
326 fail_msg
327 fi
328 fi
329 return $RETVAL
330}
331
332stop() {
333 if test -f $PIDFILE; then
334 begin_msg "Stopping VirtualBox watchdog service";
335 killproc $binary
336 RETVAL=$?
337 if ! pidof $binary > /dev/null 2>&1; then
338 rm -f $PIDFILE
339 succ_msg
340 else
341 fail_msg
342 fi
343 fi
344 return $RETVAL
345}
346
347restart() {
348 stop && start
349}
350
351status() {
352 echo -n "Checking for VBox watchdog service"
353 if [ -f $PIDFILE ]; then
354 echo " ...running"
355 else
356 echo " ...not running"
357 fi
358}
359
360case "$1" in
361start)
362 start
363 ;;
364stop)
365 stop
366 ;;
367restart)
368 restart
369 ;;
370force-reload)
371 restart
372 ;;
373status)
374 status
375 ;;
376setup)
377 ;;
378cleanup)
379 ;;
380*)
381 echo "Usage: $0 {start|stop|restart|status}"
382 exit 1
383esac
384
385exit $RETVAL
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette