#!/bin/sh # # lxc Start/Stop LXC autoboot containers # # chkconfig: 345 99 01 # description: Starts/Stops all LXC containers configured for autostart. # ### BEGIN INIT INFO # Provides: lxc # Default-Start: 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Bring up/down LXC autostart containers # Description: Bring up/down LXC autostart containers ### END INIT INFO # set -x sysconfdir="/etc" bindir="/usr/bin" localstatedir="/var" # These can be overridden in /etc/sysconfig/lxc # BOOTGROUPS - What groups should start on bootup? # Comma separated list of groups. # Leading comma, trailing comma or embedded double # comma indicates when the NULL group should be run. # Example (default): boot the onboot group first then the NULL group BOOTGROUPS="onboot," # SHUTDOWNDELAY - Wait time for a container to shut down. # ner shutdown can result in lengthy system # shutdown times. Even 5 seconds per container can be # too long. SHUTDOWNDELAY=5 # OPTIONS can be used for anything else. # If you want to boot everything then # options can be "-a" or "-a -A". OPTIONS= # STOPOPTS are stop options. The can be used for anything else to stop. # If you want to kill containers fast, use -k # --all list all auto-started containers (ignore groups) # --shutdown shutdown the containers instead of starting them STOPOPTS="--all --shutdown" # Source function library. test ! -r "$sysconfdir"/rc.d/init.d/functions || . "$sysconfdir"/rc.d/init.d/functions # Source any configurable options test ! -r "$sysconfdir"/sysconfig/lxc || . "$sysconfdir"/sysconfig/lxc # Check for needed utility program [ -x "$bindir"/lxc-autostart ] || exit 1 # If libvirtd is providing the bridge, it might not be # immediately available, so wait a bit for it before starting # up the containers or else any that use the bridge will fail # to start wait_for_bridge() { [ -f "$sysconfdir"/lxc/default.conf ] || { return 0; } which ifconfig >/dev/null 2>&1 if [ $? = 0 ]; then cmd="ifconfig -a" else which ip >/dev/null 2>&1 if [ $? = 0 ]; then cmd="ip link list" fi fi [ -n cmd ] || { return 0; } BRNAME=`grep '^[ ]*lxc.network.link' "$sysconfdir"/lxc/default.conf | sed 's/^.*=[ ]*//'` if [ -z "$BRNAME" ]; then return 0 fi for try in `seq 1 30`; do eval $cmd |grep "^$BRNAME" >/dev/null 2>&1 if [ $? = 0 ]; then return fi sleep 1 done } # See how we were called. case "$1" in start) [ ! -f "$localstatedir"/lock/subsys/lxc ] || { exit 0; } if [ -n "$BOOTGROUPS" ] then BOOTGROUPS="-g $BOOTGROUPS" fi # Start containers CONTAINERS_LIST=`/usr/bin/lxc-autostart $OPTIONS $BOOTGROUPS --list | tr '\n' ' '` # echo "DEBUG: CONTAINERS_LIST=${CONTAINERS_LIST}" run_cmd "$(nls "Starting LXC containers (%s) from groups: %s " "$CONTAINERS_LIST" "$BOOTGROUPS")" /usr/bin/lxc-autostart $OPTIONS $BOOTGROUPS touch "$localstatedir"/lock/subsys/lxc ;; stop) if [ -n "$SHUTDOWNDELAY" ] then SHUTDOWNDELAY="-t $SHUTDOWNDELAY" fi # The stop is serialized and can take excessive time. We need to avoid # delaying the system shutdown / reboot as much as we can since it's not # parallelized... Even 5 second timout may be too long. CONTAINERS_LIST=`/usr/bin/lxc-autostart $STOPOPTS --list | tr '\n' ' '` run_cmd "$(nls "Stopping running LXC containers (%s) " "$CONTAINERS_LIST")" /usr/bin/lxc-autostart $STOPOPTS $SHUTDOWNDELAY rm -f "$localstatedir"/lock/subsys/lxc ;; restart|reload|force-reload) $0 stop $0 start ;; status) lxc-ls --fancy --fancy-format name,state,pid,ipv4,ipv6,memory,ram,swap # NOTE: python3-lxc is needed for lxc-ls ;; *) echo $"Usage: $0 {start|stop|restart|reload|force-reload}" exit 2 esac exit $?