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}" |