|  | #!/bin/sh | 
|  | #  Copyright (C) 2000-2008, Parallels, Inc. All rights reserved. | 
|  | # | 
|  | #  This program is free software; you can redistribute it and/or modify | 
|  | #  it under the terms of the GNU General Public License as published by | 
|  | #  the Free Software Foundation; either version 2 of the License, or | 
|  | #  (at your option) any later version. | 
|  | # | 
|  | #  This program is distributed in the hope that it will be useful, | 
|  | #  but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | #  GNU General Public License for more details. | 
|  | # | 
|  | #  You should have received a copy of the GNU General Public License | 
|  | #  along with this program; if not, write to the Free Software | 
|  | #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | # | 
|  | # | 
|  | # (Re)start those containers which were rebooted from the inside. | 
|  |  | 
|  | VZCONF=@PKGCONFDIR@/vz.conf | 
|  | CONF_DIR=@PKGCONFDIR@/conf | 
|  | VESTAT=/proc/vz/vestat | 
|  | REBOOT_MARK='reboot' | 
|  | LOCKFILE='/var/lock/vereboot.lock' | 
|  |  | 
|  | [ -f "$VZCONF" ] || exit | 
|  | . "$VZCONF" | 
|  |  | 
|  | check_reboot() | 
|  | { | 
|  | local veid="$1" | 
|  | local ve_root | 
|  | local allowreboot | 
|  |  | 
|  | VEID="$veid" | 
|  | [ -f "$CONF_DIR/$veid.conf" ] || return | 
|  | eval ` ( | 
|  | . "$VZCONF" | 
|  | . "$CONF_DIR/$veid.conf" | 
|  | echo "ve_root=${VE_ROOT};" | 
|  | echo "allowreboot=${ALLOWREBOOT}\;" | 
|  | ) ` | 
|  | [ "$allowreboot" = 'no' ] && return | 
|  | if [ -f "$ve_root/$REBOOT_MARK" ]; then | 
|  | [ -z "$LOGFILE" ] || | 
|  | echo "`date --iso-8601=seconds` vereboot : CT $veid : reboot " >> "$LOGFILE" | 
|  | @SBINDIR@/vzctl start "$veid" >/dev/null 2>&1 | 
|  | fi | 
|  | } | 
|  |  | 
|  | lockfile() | 
|  | { | 
|  | local tmpfile="$LOCKFILE.$$" | 
|  |  | 
|  | echo $$ >"$tmpfile" 2>/dev/null || exit | 
|  | if ln "$tmpfile" "$LOCKFILE" 2>/dev/null; then | 
|  | rm -f "$tmpfile" | 
|  | return | 
|  | fi | 
|  | if kill -0 `cat $LOCKFILE 2>/dev/null` 2>/dev/null; then | 
|  | rm -f "$tmpfile" | 
|  | exit | 
|  | fi | 
|  | if ln "$tmpfile" "$LOCKFILE" 2>/dev/null; then | 
|  | rm -f "$tmpfile" | 
|  | return | 
|  | fi | 
|  | rm -f "$tmpfile" "$LOCKFILE" | 
|  | exit | 
|  | } | 
|  |  | 
|  | # If VZ is not running -- do nothing | 
|  | # Fix for OpenVZ bug #107 | 
|  | test -f "$VESTAT" || exit 0 | 
|  | lockfile | 
|  |  | 
|  | cd "$CONF_DIR" 2>/dev/null || exit 0 | 
|  | VE_TOTAL=`ls -1 *.conf 2>/dev/null | sed s/.conf//` | 
|  | VE_RUN=`awk ' | 
|  | $1 != "VEID" && $1 != "Version:" { | 
|  | if (i++) | 
|  | printf("|"); | 
|  | printf("^%s$", $1); | 
|  | } | 
|  | ' ${VESTAT}` | 
|  |  | 
|  | if [ -z "$VE_RUN" ]; then | 
|  | VE_STOPPED="$VE_TOTAL" | 
|  | else | 
|  | VE_STOPPED=`echo -e "$VE_TOTAL" | egrep -v "$VE_RUN"` | 
|  | fi | 
|  |  | 
|  | for i in $VE_STOPPED; do | 
|  | check_reboot "$i" | 
|  | done | 
|  |  | 
|  | rm -f "$LOCKFILE" | 
|  | exit 0 |