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 |
|
---|
73 | if [[ "$TMUX" ]]; then
|
---|
74 | TMUX_CMD=tmux
|
---|
75 | if [[ $TMUX = *tmate* ]]; then
|
---|
76 | TMUX_CMD=tmate
|
---|
77 | fi
|
---|
78 |
|
---|
79 | $TMUX_CMD new-window -n test:$SERVERNAME "bash $basedir/$SERVERNAME.launch"
|
---|
80 | else
|
---|
81 | screen -r -X screen -t test:$SERVERNAME bash $basedir/$SERVERNAME.launch
|
---|
82 | fi
|
---|
83 | echo "$(date) waiting in $$" >> $basedir/$SERVERNAME.log
|
---|
84 | read stdin_var
|
---|
85 | echo "$(date) EOF on stdin" >> $basedir/$SERVERNAME.log
|
---|
86 | read pid < $basedir/$SERVERNAME.pid
|
---|
87 | echo "$(date) killing $pid" >> $basedir/$SERVERNAME.log
|
---|
88 | kill $pid 2> /dev/null
|
---|
89 | echo "$(date) exiting" >> $basedir/$SERVERNAME.log
|
---|
90 | exit 0
|
---|