X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=sysv%2Futil-vserver;h=8cc173f376bca1c9e35aa0841259979d80863310;hb=775dc2bae5da1fa8ca7d1eead70e9c294ee7a23e;hp=fe0be29071e38da17a34b2296bebaa30a6ce756a;hpb=7d49edd3df55334f6c1d79a4c9c45c0cde8c373e;p=util-vserver.git diff --git a/sysv/util-vserver b/sysv/util-vserver index fe0be29..8cc173f 100755 --- a/sysv/util-vserver +++ b/sysv/util-vserver @@ -4,6 +4,16 @@ # # chkconfig: 2345 10 90 # description: Sets the path to vshelper and kills all guest processes +# +### BEGIN INIT INFO +# Provides: util-vserver +# Required-Start: $remote_fs $syslog $time +# Required-Stop: $remote_fs $syslog $time +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Sets the path to vshelper and kills all guest processes +# Description: Sets the path to vshelper and kills all guest processes +### END INIT INFO : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { @@ -32,16 +42,16 @@ function set_helper() function kill_contexts() { local xid - for xid in `ls -1 /proc/virtual`; do - test "$xid" = "info" -o "$xid" = "status" && continue + for xid in `ls -1 /proc/virtual 2>/dev/null`; do + [ "$xid" = "info" -o "$xid" = "status" ] && continue $_VATTRIBUTE --xid $xid --set --flag ~persistent $_VKILL --xid $xid -s 15 sleep 3 $_VKILL --xid $xid -s 9 done local alive=0 - for xid in `ls -1 /proc/virtual`; do - test "$xid" = "info" -o "$xid" = "status" && continue + for xid in `ls -1 /proc/virtual 2>/dev/null`; do + [ "$xid" = "info" -o "$xid" = "status" ] && continue let alive+=1 done test $alive = 0 @@ -49,7 +59,39 @@ function kill_contexts() function create_dirs() { - $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `getPhysicalDir "$__PKGSTATEREVDIR"` + $_MKDIR -p "$__RUNDIR" && $_MKDIR -p "$__VSHELPERSTATEDIR" && $_MKDIR -p `$_READLINK "$__PKGSTATEREVDIR"` +} + +function mount_cgroup() +{ + _generateCgroupOptions + test -n "$CGROUP_MNT" || return 0 + $_MKDIR -p "$CGROUP_MNT" + if test -n "$CGROUP_MNT_PER_SS"; then + for ss in "${CGROUP_SUBSYS[@]}"; do + $_MKDIR -p "$CGROUP_MNT/$ss" + $_MOUNT -t cgroup -o "$ss" vserver "$CGROUP_MNT/$ss" + done + else + oIFS="$IFS" + IFS=, + ss="${CGROUP_SUBSYS[*]}" + IFS="$oIFS" + $_MOUNT -t cgroup -o "$ss" vserver "$CGROUP_MNT" + fi +} + +function umount_cgroup() +{ + _generateCgroupOptions + test -n "$CGROUP_MNT" || return 0 + if test -n "$CGROUP_MNT_PER_SS"; then + for ss in "${CGROUP_SUBSYS[@]}"; do + $_UMOUNT "$CGROUP_MNT/$ss" + done + else + $_UMOUNT "$CGROUP_MNT" + fi } function start() @@ -62,8 +104,13 @@ function start() _endResult $? local retval=$? _beginResult $"Loading default device map" - loadDeviceMap 0 "$__CONFDIR/.defaults/apps/vdevmap" + handleDeviceMap --set 0 "$__CONFDIR/.defaults/apps/vdevmap" _endResult $? + if hasCgroup; then + _beginResult $"Mounting cgroup-hierarchy" + mount_cgroup + _endResult $? + fi test "$retval" -ne 0 || touch "$lockfile" return $retval } @@ -78,6 +125,11 @@ function stop() kill_contexts _endResult $? local retval=$? + if hasCgroup; then + _beginResult $"Unmounting cgroup-hierarchy" + umount_cgroup + _endResult $? + fi $_RM -f "$lockfile" return $retval }