Skip to content

Instantly share code, notes, and snippets.

@bacinsky
Last active August 29, 2015 14:04
Show Gist options
  • Save bacinsky/0008e490ac1e035b51cc to your computer and use it in GitHub Desktop.
Save bacinsky/0008e490ac1e035b51cc to your computer and use it in GitHub Desktop.
/etc/init.d/selenium
#!/bin/bash
# options
selenium='java -jar -Xms256m -Xmx256m'
jar=/var/lib/selenium/selenium-server.jar
lock=/tmp/selenium-port-*.lock
log=/tmp/selenium-output.log
err=/tmp/selenium-error.log
port=${PORT-'4444'}
no_xvfb=${X-''}
# functions
help () {
echo ''
echo ' Usage:'
echo ''
echo ' X=0 '$BASH_SOURCE' port|start|stop|kill'
echo ''
echo ' X=0 Disable Virtual Frame Buffer'
echo ''
}
lock_file () {
echo $(echo "$lock" | sed 's/\*/'$port'/g')
}
stop_selenium () {
# kills selenium on a specified port
kill $(ps aux | grep '[s]elenium-server.jar -port '$port | awk '{print $2}') 2> /dev/null
}
kill_xvfb () {
local pid=$(ps aux | grep '[X]vfb' | awk '{print $2}')
[[ -n $pid ]] && echo 'Stopping Xvfb' && kill $pid 2> /dev/null
}
# commands
case "${1:-''}" in
'port')
# returns available port for selenium webdriver
while [[ -f $(lock_file) ]]; do
port='44'$((RANDOM % 10))''$((RANDOM % 10))
done
touch $(lock_file)
echo $port
exit 0
;;
'start')
echo "Starting Selenium on port $port..."
stop_selenium
selenium=$selenium" $jar -port $port"
if [[ -z $no_xvfb ]]; then
display=':'$port
echo 'With Xvfb '$display
DISPLAY=$display xvfb-run --auto-servernum --server-num=$port --server-args='-screen 0 1680x1050x24+32' $selenium > $log 2> $err &
else
$selenium > $log 2> $err &
display=:0
fi
sleep 3
error=$?
if test $error -gt 0
then
echo "${bon}Error $error! Couldn't start Selenium!${boff}"
sh "$BASH_SOURCE" stop
exit 1
fi
exit 0
;;
'stop')
# stops selenium & Xvfb for specified port
echo "Stopping Selenium on port $port..."
stop_selenium
rm -f $(lock_file)
# stops Xvfb when no selenium is running
[[ -z $(ls $lock 2> /dev/null) ]] && kill_xvfb
exit 0
;;
'kill')
# kill all selenium instances & xvfb
kill $(ps aux | grep '[s]elenium-server.jar' | awk '{print $2}') 2> /dev/null
kill_xvfb
rm -f $lock
exit 0
;;
*)
help
exit 1
shift
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment