X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=vm_hosted;h=9743830488a48aa776f4e38b85070f509e83636e;hb=e80dbf50a89c0b84174e566b85af9593410becfb;hp=8a6c8d2b5213b0a8069a1ed1a6174eff09cbd534;hpb=dae8fe647e7f10f8578a9bd6b64122df1b3f4e88;p=lhc%2Fateliers.git diff --git a/vm_hosted b/vm_hosted index 8a6c8d2..9743830 100755 --- a/vm_hosted +++ b/vm_hosted @@ -7,6 +7,7 @@ while test -L "$tool" tool=${tool%/*} . "$tool"/lib/rule.sh . "$tool"/etc/vm.sh +export TRACE=1 rule_help () { # SYNTAX: [--hidden] local hidden; [ ${1:+set} ] || hidden=set @@ -1117,10 +1118,20 @@ rule_procmail_configure () { rule_runit_configure () { rule apt_get_install runit local -; set +f - rm -f /etc/service/* - # NOTE: runsvdir éteindra les services qui n'apparaîtront plus ici. - for sv in "$tool"/etc/sv/* - do sv=${sv#"$tool"/etc/sv/} + for sv in ${1-/etc/service/*} + # NOTE: stoppe les services en retenant leur status de départ + do sv=$(basename "$sv") + local sv_hash=$(printf %s "$sv" | sha1sum | cut -f 1 -d ' ') + local sv_status + IFS= read -r sv_status_$sv_hash <<-EOF + $(sv status "$sv") + EOF + rm -f /etc/service/"$sv" + done + for sv in ${1-"$tool"/etc/sv/*} + # NOTE: configure et (re-)démarre les services + do sv=$(basename "$sv") + local sv_hash=$(printf %s "$sv" | sha1sum | cut -f 1 -d ' ') sudo install -d -m 770 -o root -g root \ /etc/sv/"$sv" sudo install -m 770 -o root -g root \ @@ -1134,13 +1145,14 @@ rule_runit_configure () { "$tool"/etc/sv/"$sv"/log/run \ /etc/sv/"$sv"/log/run fi - if test ! -x "$tool"/etc/sv/"$sv"/configure || - "$tool"/etc/sv/"$sv"/configure - then - ln -fns ../sv/"$sv" /etc/service/"$sv" - test ! -e /etc/sv/"$sv"/supervise/ok || - sv restart "$sv" - fi + test ! -x "$tool"/etc/sv/"$sv"/configure || + "$tool"/etc/sv/"$sv"/configure + ln -fns ../sv/"$sv" /etc/service/"$sv" + eval local sv_status=\"\${sv_status_$sv_hash-}\" + case $sv_status in + ("") sv start "$sv";; + (run:*) sv restart "$sv";; + esac done } rule_ssh_configure () {