3 # xendomains Start / stop domains automatically when domain 0 boots / shuts down.
6 # description: Start / stop Xen domains.
9 . /etc/rc.d/init.d/functions
11 if ! [ -e /proc/xen/privcmd ]; then
15 TOOLSTACK=$(/usr/libexec/xen/bin/xen-toolstack toolstack 2>/dev/null)
17 echo "No usable Xen toolstack selected"
20 if [ "$(basename "$TOOLSTACK")" != xl ] && [ "$(basename "$TOOLSTACK")" != xm ]; then
24 if ! /usr/libexec/xen/bin/xen-toolstack list >/dev/null 2>&1 ; then
28 [ -r /etc/sysconfig/xendomains ] && . /etc/sysconfig/xendomains
34 /usr/libexec/xen/bin/xen-toolstack create --quiet --dryrun --defconfig "$1" | sed -n 's/^.*(name \(.*\))$/\1/p;s/^.*"name": "\(.*\)",$/\1/p'
39 /usr/libexec/xen/bin/xen-toolstack domid "$1" >/dev/null 2>&1
48 coproc "$@" >/dev/null 2>&1
51 exec {COPROC_OUT}<&"${COPROC[0]}"
52 local PID="$COPROC_PID"
54 for no in $(seq 0 $TIMEOUT); do
55 if [ -z "$COPROC_PID" ]; then break; fi
59 kill -INT "$COPROC_PID" >/dev/null 2>&1
62 if [ $rc -eq 0 ]; then
68 [ $rc -gt 0 ] && cat <&$COPROC_OUT
76 for no in $(seq 0 $TIMEOUT); do
77 if ! check_running "$name"; then return 0; fi
85 [ -n "$XENDOMAINS_SAVE" ] || return
86 [ -d "$XENDOMAINS_SAVE" ] || return
87 [ -n "$XENDOMAINS_RESTORE" ] || return
89 for file in $XENDOMAINS_SAVE/*; do
90 if [ -f $file ] ; then
92 show "Restoring Xen domain $name (from $file)"
95 out=$(/usr/libexec/xen/bin/xen-toolstack restore "$file" >/dev/null 2>&1)
99 domains[$name]='started'
103 domains[$name]='failed'
114 [ -n "$XENDOMAINS_AUTO" ] || return
115 [ -d "$XENDOMAINS_AUTO" ] || return
117 for file in $XENDOMAINS_AUTO/*; do
118 name="$(check_config_name $file)"
120 if [ "${domains[$name]}" = started ]; then
122 elif check_running "$name"; then
123 echo "Xen domain $name already running"
125 show "Starting Xen domain $name (from $file)"
128 if [ "${domains[$name]}" = failed ]; then
131 out=$(/usr/libexec/xen/bin/xen-toolstack create --quiet --defconfig "$file" >/dev/null 2>&1)
150 if [ -f /var/lock/subsys/xendomains ]; then
151 msg_already_running "xendomains"
158 touch /var/lock/subsys/xendomains
163 [ -n "$XENDOMAINS_MIGRATE" ] || return
165 while read id name rest; do
166 show "Migrating Xen domain $name ($id)"
168 (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" /usr/libexec/xen/bin/xen-toolstack migrate $id $XENDOMAINS_MIGRATE)
169 done < <(/usr/libexec/xen/bin/xen-init-list)
174 [ -n "$XENDOMAINS_SAVE" ] || return
175 [ -d "$XENDOMAINS_SAVE" ] || mkdir -m 0700 -p "$XENDOMAINS_SAVE"
177 while read id name rest; do
178 show "Saving Xen domain $name ($id)"
180 (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" /usr/libexec/xen/bin/xen-toolstack save $id $XENDOMAINS_SAVE/$name)
181 done < <(/usr/libexec/xen/bin/xen-init-list)
186 while read id name rest; do
187 show "Shutting down Xen domain $name ($id)"
189 /usr/libexec/xen/bin/xen-toolstack shutdown $id >/dev/null 2>&1
190 if [ $? -eq 0 ]; then
195 done < <(/usr/libexec/xen/bin/xen-init-list)
196 while read id name rest; do
197 show "Waiting for Xen domain $name ($id) to shut down"
199 timeout_domain "$name" "$XENDOMAINS_STOP_MAXWAIT"
200 if [ $? -eq 0 ]; then
205 done < <(/usr/libexec/xen/bin/xen-init-list)
210 if [ ! -f /var/lock/subsys/xendomains ]; then
211 msg_not_running "xendomains"
219 rm -f /var/lock/subsys/xendomains
238 if [ -f /var/lock/subsys/xendomains ]; then
239 /usr/libexec/xen/bin/xen-toolstack list -v
243 echo "Usage: $0 {start|stop|status|restart|reload|force-reload}"