#!/bin/bash # $Header: /root/magellan-cvs/src/xen-tools/xendomains.rc,v 1.1 2008-05-24 10:32:18 niro Exp $ #%rlevels: 3:s 4:s 5:s 0:k 1:k 2:k 6:k #%start: 65 #%stop: 25 #deps #%needs: #%before: #%after: source /etc/sysconfig/rc source $rc_functions get_domname() { local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" | tail -n 1) if [[ -z ${name_from_file} ]] then basename "${1}" else echo ${name_from_file} fi } is_running() { /usr/sbin/xm list "${1}" >/dev/null 2>&1 } set_screen_cmd() { screen_cmd="screen -q -r ${SCREEN_NAME:=xen} -X" } using_screen() { [[ "${SCREEN}" == "yes" || "${SCREEN}" == "YES" ]] } case "$1" in start) set_screen_cmd echo -e ${COLOREDSTAR}"Starting Xen domains from ${AUTODIR:=/etc/xen/auto} ..." if using_screen then echo -e ${COLOREDSTAR}"Creating screen session to hold domain consoles ..." ( screen -d -m -S ${SCREEN_NAME} -t dom0 \ && ${screen_cmd} zombie dr \ && logrotate -f /etc/xen/xen-consoles.logrotate \ && ${screen_cmd} logfile /var/log/xen-consoles/%t.log \ && ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \ && ${screen_cmd} log on \ && ${screen_cmd} deflog on ) >/dev/null if [[ $? -ne 0 ]] then evaluate_retval return 1 else evaluate_retval fi fi # Create all domains with config files in AUTODIR for dom in $(ls "${AUTODIR}/"* 2>/dev/null) do name=$(get_domname ${dom}) if ! is_running ${name} then echo -e ${COLOREDSTAR}"Starting domain ${name} ..." if using_screen then ${screen_cmd} screen -t ${name} xm create ${dom} -c else xm create --quiet ${dom} fi evaluate_retval else ${WARNING} "Not starting domain ${name} - already running ..." fi done update_svcstatus $1 splash svc_started "$(basename $0)" 0 ;; stop) set_screen_cmd echo -e ${COLOREDSTAR}"Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto} ..." # Stop all domains with config files in AUTODIR for dom in $(ls "${AUTODIR}/"* 2>/dev/null) do name=$(get_domname ${dom}) if is_running ${name} then echo -e ${COLOREDSTAR}"Stopping domain ${name} ..." xm shutdown --wait ${name} >/dev/null evaluate_retval else ${WARNING} "Not stopping domain ${name} - not running ..." fi done if using_screen then echo -e ${COLOREDSTAR}"Closing screen session ${SCREEN_NAME} ..." ${screen_cmd} quit evaluate_retval fi update_svcstatus $1 splash svc_stopped "$(basename $0)" 0 ;; restart) $0 stop sleep 1 $0 start ;; status) /usr/sbin/xm list ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac