[740] | 1 | #!/usr/bin/env bash
|
---|
| 2 |
|
---|
| 3 | export TMPDIR="$SELFTEST_TMPDIR"
|
---|
| 4 |
|
---|
| 5 | SERVERNAME="$ENVNAME"
|
---|
| 6 | [ -z "$SERVERNAME" ] && SERVERNAME="base"
|
---|
| 7 | basedir=$TMPDIR
|
---|
| 8 | osname=$(uname)
|
---|
| 9 | if [ "$osname" = "Linux" ]; then
|
---|
| 10 | vars=$(mktemp)
|
---|
| 11 | else
|
---|
| 12 | vars=$(mktemp -t tmpsmb)
|
---|
| 13 | function seq() {
|
---|
| 14 | dpt=$1
|
---|
| 15 | end=$2
|
---|
| 16 | while [ $dpt -le $end ]; do
|
---|
| 17 | echo "$dpt"
|
---|
| 18 | dpt=$(( $dpt + 1))
|
---|
| 19 | done
|
---|
| 20 | }
|
---|
| 21 | fi
|
---|
| 22 |
|
---|
| 23 | [ -r $basedir/$SERVERNAME.pid ] && {
|
---|
| 24 | for i in $(seq 2 100); do
|
---|
| 25 | if [ ! -r "$basedir/${SERVERNAME}-$i.pid" ]; then
|
---|
| 26 | SERVERNAME="${SERVERNAME}-$i"
|
---|
| 27 | break
|
---|
| 28 | fi
|
---|
| 29 | done
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | rm -f $basedir/$SERVERNAME.*
|
---|
| 33 |
|
---|
| 34 | # set most of the environment vars we have in the screen session too
|
---|
| 35 | _ENV=""
|
---|
| 36 | printenv |
|
---|
| 37 | egrep -v '^TERMCAP|^WINDOW|^SHELL|^STY|^SHLVL|^SAMBA_VALGRIND|\$' |
|
---|
| 38 | egrep '^[A-Z]' |
|
---|
| 39 | sed "s/\(^[^=]*=\)\(.*\)/export \1'\2'/g" > $basedir/$SERVERNAME.vars
|
---|
| 40 |
|
---|
| 41 | cat <<EOF > $basedir/$SERVERNAME.launch
|
---|
| 42 | cd $PWD
|
---|
| 43 | echo \$\$ > $basedir/$SERVERNAME.pid
|
---|
| 44 | . $basedir/$SERVERNAME.vars
|
---|
| 45 | echo "\$(date) starting $SERVERNAME" >> $basedir/$SERVERNAME.log
|
---|
| 46 | $@
|
---|
| 47 | echo \$? > $basedir/$SERVERNAME.status
|
---|
| 48 | read parent < $basedir/$SERVERNAME.parent.pid
|
---|
| 49 | kill \$parent
|
---|
| 50 | EOF
|
---|
| 51 | pid=$$
|
---|
| 52 |
|
---|
| 53 | cleanup() {
|
---|
| 54 | trap "exit 1" SIGINT SIGTERM SIGPIPE
|
---|
| 55 | [ -r $basedir/$SERVERNAME.status ] && {
|
---|
| 56 | read status < $basedir/$SERVERNAME.status
|
---|
| 57 | echo "$(date) samba exited with status $status" >> $basedir/$SERVERNAME.log
|
---|
| 58 | exit $status
|
---|
| 59 | }
|
---|
| 60 | read pid < $basedir/$SERVERNAME.pid
|
---|
| 61 | echo "$(date) Killing samba pid $pid from $$" >> $basedir/$SERVERNAME.log
|
---|
| 62 | if [ "$pid" = "$$" ]; then
|
---|
| 63 | exit 1
|
---|
| 64 | fi
|
---|
| 65 | kill -9 $pid 2>&1
|
---|
| 66 | exit 1
|
---|
| 67 | }
|
---|
| 68 |
|
---|
| 69 | rm -f $basedir/$SERVERNAME.status $basedir/$SERVERNAME.log
|
---|
| 70 | echo $$ > $basedir/$SERVERNAME.parent.pid
|
---|
| 71 | trap cleanup SIGINT SIGTERM SIGPIPE
|
---|
| 72 | screen -r -X screen -t test:$SERVERNAME bash $basedir/$SERVERNAME.launch
|
---|
| 73 | echo "$(date) waiting in $$" >> $basedir/$SERVERNAME.log
|
---|
| 74 | read stdin_var
|
---|
| 75 | echo "$(date) EOF on stdin" >> $basedir/$SERVERNAME.log
|
---|
| 76 | read pid < $basedir/$SERVERNAME.pid
|
---|
| 77 | echo "$(date) killing $pid" >> $basedir/$SERVERNAME.log
|
---|
| 78 | kill $pid 2> /dev/null
|
---|
| 79 | echo "$(date) exiting" >> $basedir/$SERVERNAME.log
|
---|
| 80 | exit 0
|
---|