Last active
August 29, 2015 14:04
-
-
Save bacinsky/0008e490ac1e035b51cc to your computer and use it in GitHub Desktop.
/etc/init.d/selenium
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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