|
Lines 11-17
Link Here
|
| 11 |
} |
11 |
} |
| 12 |
|
12 |
|
| 13 |
get_domname() { |
13 |
get_domname() { |
| 14 |
local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" | tail -n 1) |
14 |
local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" 2>/dev/null | tail -n 1) |
| 15 |
|
15 |
|
| 16 |
if [ -z ${name_from_file} ] ; then |
16 |
if [ -z ${name_from_file} ] ; then |
| 17 |
basename "${1}" |
17 |
basename "${1}" |
|
Lines 24-35
Link Here
|
| 24 |
/usr/sbin/xl list "${1}" >/dev/null 2>&1 |
24 |
/usr/sbin/xl list "${1}" >/dev/null 2>&1 |
| 25 |
} |
25 |
} |
| 26 |
|
26 |
|
|
|
27 |
domains_running() { |
| 28 |
if [[ "`jobs -l|wc -l`" -eq "0" ]] ; then |
| 29 |
return 1 |
| 30 |
else |
| 31 |
return 0 |
| 32 |
fi |
| 33 |
|
| 34 |
} |
| 35 |
|
| 27 |
using_screen() { |
36 |
using_screen() { |
| 28 |
[ "${SCREEN}" = "yes" -o "${SCREEN}" = "YES" ] |
37 |
[ "${SCREEN}" = "yes" -o "${SCREEN}" = "YES" ] |
| 29 |
} |
38 |
} |
| 30 |
|
39 |
|
| 31 |
set_screen_cmd() { |
40 |
set_screen_cmd() { |
| 32 |
screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r ${SCREEN_NAME:=xen} -X" |
41 |
export SCREENDIR |
|
|
42 |
screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r -S ${SCREEN_NAME:=xen} -X" |
| 43 |
} |
| 44 |
|
| 45 |
exists_screen() { |
| 46 |
export SCREENDIR |
| 47 |
screen -c ${SCREENRC:-/dev/null} -S ${SCREEN_NAME:=xen} -q -ls -r |
| 48 |
# <10 no sessions, 10 session, but attached, 11 1 session, 12 2 sessions, ... |
| 49 |
running_sessions=$? |
| 50 |
return $running_sessions |
| 33 |
} |
51 |
} |
| 34 |
|
52 |
|
| 35 |
start() { |
53 |
start() { |
|
Lines 37-58
Link Here
|
| 37 |
|
55 |
|
| 38 |
einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}" |
56 |
einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}" |
| 39 |
if using_screen ; then |
57 |
if using_screen ; then |
| 40 |
ebegin "Creating screen session to hold domain consoles" |
58 |
export SCREENDIR |
| 41 |
( screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME} -t dom0 \ |
59 |
einfo "Wiping old sessions" |
| 42 |
&& sleep 5 \ |
60 |
screen -S ${SCREEN_NAME:=xen} -wipe |
| 43 |
&& ${screen_cmd} zombie dr \ |
61 |
exists_screen |
| 44 |
&& logrotate -f /etc/xen/xen-consoles.logrotate \ |
62 |
rsessions=$? |
| 45 |
&& ${screen_cmd} logfile /var/log/xen-consoles/%t.log \ |
63 |
case $rsessions in |
| 46 |
&& ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \ |
64 |
"8") # no screeen, create |
| 47 |
&& ${screen_cmd} log on \ |
65 |
ebegin "Creating screen session to hold domain consoles" |
| 48 |
&& ${screen_cmd} deflog on ) >/dev/null |
66 |
( |
| 49 |
if [ $? -ne 0 ] ; then |
67 |
screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME:=xen} -t dom0 \ |
|
|
68 |
&& sleep 5 \ |
| 69 |
&& ${screen_cmd} zombie dr \ |
| 70 |
&& logrotate -f /etc/xen/xen-consoles.logrotate \ |
| 71 |
&& ${screen_cmd} logfile /var/log/xen-consoles/%t.log \ |
| 72 |
&& ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \ |
| 73 |
&& ${screen_cmd} log on \ |
| 74 |
&& ${screen_cmd} deflog on ) 2>&1 >/tmp/debug #>/dev/null |
| 75 |
if [ $? -ne 0 ] ; then |
| 76 |
eend 1 |
| 77 |
return 1 |
| 78 |
else |
| 79 |
eend |
| 80 |
fi |
| 81 |
;; |
| 82 |
"10") # screen, but attached. detach. |
| 83 |
ebegin "Detaching the connected screen session" |
| 84 |
screen -d -S ${SCREEN_NAME:=xen} |
| 85 |
eend $? |
| 86 |
;; |
| 87 |
"11") # one session free, do nothing |
| 88 |
einfo "Already existing screen session, doing nothing" |
| 89 |
;; |
| 90 |
*) # more than one session |
| 91 |
let rsessions=$rsessions-10 |
| 92 |
ebegin "$rsessions session running. Please check with screen -S xen -ls." |
| 50 |
eend 1 |
93 |
eend 1 |
| 51 |
return 1 |
94 |
return 1 |
| 52 |
else |
95 |
esac |
| 53 |
eend |
|
|
| 54 |
fi |
| 55 |
fi |
96 |
fi |
|
|
97 |
# debug |
| 98 |
#eend 1 |
| 99 |
#return 1 |
| 56 |
# Create all domains with config files in AUTODIR. |
100 |
# Create all domains with config files in AUTODIR. |
| 57 |
for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do |
101 |
for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do |
| 58 |
name=$(get_domname ${dom}) |
102 |
name=$(get_domname ${dom}) |
|
Lines 76-83
Link Here
|
| 76 |
einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}" |
120 |
einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}" |
| 77 |
# Stop all domains with config files in AUTODIR. |
121 |
# Stop all domains with config files in AUTODIR. |
| 78 |
DOMAINS="$(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort -r)" |
122 |
DOMAINS="$(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort -r)" |
| 79 |
|
123 |
RDOMAINS="$(/usr/sbin/xl vm-list|awk '{print $3}'|grep -v "^name$")" |
| 80 |
if [ "$PARALLEL_SHUTDOWN" = "yes" ] ; then |
124 |
|
|
|
125 |
# Adding running domains |
| 126 |
for rdom in $RDOMAINS ; do |
| 127 |
if [[ "`echo $DOMAINS | grep $rdom`" == "" ]] ; then |
| 128 |
DOMAINS="$rdom $DOMAINS" |
| 129 |
fi |
| 130 |
done |
| 131 |
|
| 132 |
if [[ "$PARALLEL_SHUTDOWN" == "yes" ]] ; then |
| 81 |
for dom in $DOMAINS ; do |
133 |
for dom in $DOMAINS ; do |
| 82 |
name=$(get_domname ${dom}) |
134 |
name=$(get_domname ${dom}) |
| 83 |
if is_running ${name} ; then |
135 |
if is_running ${name} ; then |
|
Lines 87-107
Link Here
|
| 87 |
einfo " Not stopping domain ${name} - not running" |
139 |
einfo " Not stopping domain ${name} - not running" |
| 88 |
fi |
140 |
fi |
| 89 |
done |
141 |
done |
| 90 |
einfo " Waiting for shutdown of domains that are still running" |
142 |
einfo " Waiting ${MAXWAIT} seconds for shutdown of domains that are still running" |
| 91 |
wait |
143 |
counter=0 |
| 92 |
eend $? |
144 |
while domains_running ; do |
|
|
145 |
if [[ ${counter} -gt ${MAXWAIT} ]] ; then |
| 146 |
break |
| 147 |
fi |
| 148 |
sleep 1 |
| 149 |
let counter=$counter+1 |
| 150 |
echo -n . |
| 151 |
done |
| 93 |
else |
152 |
else |
| 94 |
for dom in $DOMAINS ; do |
153 |
for dom in $DOMAINS ; do |
| 95 |
name=$(get_domname ${dom}) |
154 |
name=$(get_domname ${dom}) |
| 96 |
if is_running ${name} ; then |
155 |
if is_running ${name} ; then |
| 97 |
ebegin " Waiting for domain ${name} to shutdown" |
156 |
ebegin " Waiting ${MAXWAIT} seconds for domain ${name} to shutdown" |
| 98 |
xl shutdown -w ${name} >/dev/null |
157 |
xl shutdown ${name} >/dev/null |
| 99 |
eend $? |
158 |
counter=0 |
|
|
159 |
while is_running ${name} ; do |
| 160 |
if [[ ${counter} -gt ${MAXWAIT} ]] |
| 161 |
then |
| 162 |
break |
| 163 |
fi |
| 164 |
sleep 1 |
| 165 |
let counter=$counter+1 |
| 166 |
echo -n . |
| 167 |
done |
| 100 |
else |
168 |
else |
| 101 |
einfo " Not stopping domain ${name} - not running" |
169 |
einfo " Not stopping domain ${name} - not running" |
| 102 |
fi |
170 |
fi |
| 103 |
done |
171 |
done |
| 104 |
fi |
172 |
fi |
|
|
173 |
|
| 174 |
# Destroying remaining domains |
| 175 |
DOMAINS="$(/usr/sbin/xl vm-list|awk '{print $3}'|grep -v "^name$")" |
| 176 |
for dom in $DOMAINS ; do |
| 177 |
name=$(get_domname ${dom}) |
| 178 |
if is_running ${name} ; then |
| 179 |
ebegin " Destroying running domain ${name}..." |
| 180 |
xl destroy ${name} >/dev/null |
| 181 |
else |
| 182 |
einfo " Not stopping domain ${name} - not running" |
| 183 |
fi |
| 184 |
done |
| 185 |
|
| 105 |
if using_screen ; then |
186 |
if using_screen ; then |
| 106 |
if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then |
187 |
if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then |
| 107 |
ebegin "Closing screen session ${SCREEN_NAME}" |
188 |
ebegin "Closing screen session ${SCREEN_NAME}" |