diff --git a/utils/lxc/files/lxc-auto.config b/utils/lxc/files/lxc-auto.config new file mode 100644 index 0000000000..b5a7ec9920 --- /dev/null +++ b/utils/lxc/files/lxc-auto.config @@ -0,0 +1,5 @@ +#config container + #option name container1 + #option timeout 300 + #list command '/bin/command --option' + diff --git a/utils/lxc/files/lxc-auto.init b/utils/lxc/files/lxc-auto.init new file mode 100755 index 0000000000..937f082694 --- /dev/null +++ b/utils/lxc/files/lxc-auto.init @@ -0,0 +1,60 @@ +#!/bin/sh /etc/rc.common + +. /lib/functions.sh + +START=99 +STOP=00 + +run_command() { + local command="$1" + $command +} + +start_container() { + local cfg="$1" + local name + + config_get name "$cfg" name + config_list_foreach "$cfg" command run_command + if [ -n "$name" ]; then + /usr/bin/lxc-start -n "$name" + fi +} + +max_timeout=0 + +stop_container() { + local cfg="$1" + local name timeout + + config_get name "$cfg" name + config_get timeout "$cfg" timeout 300 + + if [ "$max_timeout" -lt "$timeout" ]; then + max_timeout=$timeout + fi + + if [ -n "$name" ]; then + if [ "$timeout" = "0" ]; then + /usr/bin/lxc-stop -n "$name" & + else + /usr/bin/lxc-stop -n "$name" -t $timeout & + fi + fi +} + +start() { + config_load lxc-auto + config_foreach start_container container +} + +stop() { + config_load lxc-auto + config_foreach stop_container container + # ensure e.g. shutdown doesn't occur before maximum timeout on + # containers that are shutting down + if [ $max_timeout -gt 0 ]; then + sleep $max_timeout + fi +} +