-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinit
executable file
·131 lines (120 loc) · 3.17 KB
/
init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#! /bin/sh
### BEGIN INIT INFO
# Provides: lxc
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts/stops linux containers
# Description: Provides linux container management: start, stop or
# restart containers.
### END INIT INFO
# Author: Nigel McNie <[email protected]>
#set -x
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="linux containers"
NAME=lxc
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x /usr/bin/lxc-start ] || exit 0
. /lib/init/vars.sh
. /lib/lsb/init-functions
do_start()
{
for C in $(ls -1 /var/lib/lxc); do
if [ -r /var/lib/lxc/$C/autostart ]; then
if [ "$(cat /var/lib/lxc/$C/autostart)" = "1" ]; then
log_progress_msg "$C"
if lxc-info -n $C | grep STOPPED > /dev/null 2>&1; then
if [ -x /usr/bin/screen ]; then
/usr/bin/screen -dmS init-${C} /usr/bin/lxc-start -n $C
else
lxc-start -n $C -d
fi
lxc-wait -n $C -s RUNNING
if [ $? -gt 0 ]; then
return 2
fi
fi
fi
fi
done
}
do_stop()
{
halt=$(which lxc-halt)
for C in $(ls -1 /var/lib/lxc); do
if [ -f /var/lib/lxc/$C/state ]; then
log_progress_msg "$C"
if lxc-info -n $C | grep RUNNING > /dev/null 2>&1; then
if [ -n "$halt" ]; then
$halt -n $C &
else
/usr/bin/lxc-stop -n $C
if [ $? -gt 0 ]; then
return 2
fi
fi
fi
fi
done
if [ -n "$halt" ]; then
# Wait for all containers to be shutdown
starttime=$(date "+%s")
while true
do
if cat /var/lib/lxc/*/state | grep -vE "RUNNING|STOPPING" > /dev/null ; then
return 0
fi
sleep .25
curtime=$(date "+%s")
if [ $(( $curtime - $starttime )) -gt 30 ]; then
log_warning_msg "Containers have been stopping for longer than 30 seconds"
# TODO force their shutdown. And maybe 30 seconds isn't long enough
return 0
fi
done
fi
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" #"$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" #"$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" #"$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
: