40 lines
1.4 KiB
Bash
Executable File
40 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -o errexit
|
|
set -o pipefail
|
|
|
|
echo "Stopping Sauce Connect"
|
|
|
|
# Sauce Connect 4 docs said that we can just kill -9 it if we don't care about
|
|
# failing any ongoing sessions. In practice, that sometimes worked but usually
|
|
# leaked a tunnel so badly that you couldn't even stop it from the web UI.
|
|
#
|
|
# Sauce Connect 5 appears to be *much* more prone to hung jobs. Hung jobs have
|
|
# a shutdown deadline of *three hours*, however, they appear to usually exit
|
|
# within a minute or so. Unfortunately the only thing the Sauce Connect 5 docs
|
|
# say about shutdown is that "you can stop your tunnel from the terminal where
|
|
# Sauce Connect is running by entering Ctrl+C". Nothing is said about what to
|
|
# do if Sauce Connect doesn't exit on it own or about non-interactive usage.
|
|
#
|
|
# So we do our best to be well-behaved without assuming that Sauce Connect
|
|
# always is: send it the same signal that it would get if an interactive user
|
|
# hit ctrl-c, wait a while for it to exit, then give up so that the CI task
|
|
# doesn't keep running indefinitely.
|
|
|
|
if ! pkill -INT '^sc$'; then
|
|
echo "sc does not appear to be running" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
# Wait up to 2 minutes, then give up if it's still running
|
|
n=0
|
|
while [ $n -lt 120 ] && pgrep '^sc$' > /dev/null; do
|
|
sleep 1
|
|
pkill -INT '^sc$' || true
|
|
n=$(($n + 1))
|
|
done
|
|
|
|
if pgrep '^sc$' > /dev/null; then
|
|
echo "Could not shut down Sauce Connect"
|
|
exit 1
|
|
fi
|