#!/bin/bash # /etc/init.d/selenium-server # debian-compatible selenium-server startup script. # Amelia A Lewis # ### BEGIN INIT INFO # Provides: selenium-server # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start selenium-server at boot time # Description: Controls the selenium server engine. ### END INIT INFO PATH=/bin:/usr/bin:/sbin:/usr/sbin DESC="Selenium Remote Control Server" NAME=selenium-server SCRIPTNAME=/etc/init.d/$NAME [ -r /etc/default/$NAME ] && . /etc/default/$NAME DAEMON=/usr/bin/daemon DAEMON_ARGS="--name=$NAME --inherit --env=SELENIUM_HOME=$SELENIUM_HOME --output=$SELENIUM_LOG --pidfile=$PIDFILE" PGREP_REGEXP="$SELENIUM_JAR|Xvfb|xvfb-run|chrome|chromedriver" SU=/bin/su # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # load environments if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG LANGUAGE elif [ -r /etc/environment ]; then . /etc/environment export LANG LANGUAGE fi # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # Make sure we run as root, since setting the max open files through # ulimit requires root access if [ `id -u` -ne 0 ]; then echo "The $NAME init script can only be run as root" exit 1 fi check_tcp_port() { local service=$1 local assigned=$2 local default=$3 if [ -n "$assigned" ]; then port=$assigned else port=$default fi count=`netstat --listen --numeric-ports | grep \:$port[[:space:]] | grep -c . ` if [ $count -ne 0 ]; then echo "The selected $service port ($port) seems to be in use by another program " echo "Please select another port to use for $NAME" return 1 fi } # # Function that starts the daemon/service # do_start() { # the default location is /var/run/selenium-server/selenium-server.pid but the parent directory needs to be created mkdir `dirname $PIDFILE` > /dev/null 2>&1 || true chown $SELENIUM_USER `dirname $PIDFILE` # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started $DAEMON $DAEMON_ARGS --running && return 1 # Verify that the selenium-server port is not already in use check_tcp_port "http" "$HTTP_PORT" "4444" || return 1 # --user in daemon doesn't prepare environment variables like HOME, USER, LOGNAME or USERNAME, # so we let su do so for us now $SU -l $SELENIUM_USER --shell=/bin/bash -c "$DAEMON $DAEMON_ARGS -- $XVFB $XVFB_ARGS $JAVA $JAVA_ARGS -jar $SELENIUM_JAR $SELENIUM_ARGS" || return 2 } # # Verify that all selenium-server processes have been shutdown # and if not, then do killall for them # get_running() { return `pgrep -c -f "$PGREP_REGEXP"` } force_stop() { get_running if [ $? -ne 0 ]; then pkill -U $SELENIUM_USER -f "$PGREP_REGEXP" || return 3 fi } # Get the status of the daemon process get_daemon_status() { $DAEMON $DAEMON_ARGS --running || return 1 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred get_daemon_status case "$?" in 0) #THIS DOES NOTHING?! $DAEMON $DAEMON_ARGS --stop || return 2 # wait for the process to really terminate for n in 1 2 3 4 5; do sleep 1 $DAEMON $DAEMON_ARGS --running || break done if get_daemon_status; then force_stop || return 3 fi ;; *) force_stop || return 3 ;; esac # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return 0 } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; status) get_daemon_status case "$?" in 0) echo "$DESC is running with the pid `cat $PIDFILE`";; *) get_running procs=$? if [ $procs -eq 0 ]; then echo -n "$DESC is not running" if [ -f $PIDFILE ]; then echo ", but the pidfile ($PIDFILE) still exists" else echo fi else echo "$procs instances of selenium-server are running at the moment" echo "but the pidfile $PIDFILE is missing" fi ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac exit 0