Following are steps needed to have earthworm (EW) start up automatically when a Sun workstation running Solaris boots up.
Overview of the steps:
The following is an example script which can be used to start earthworm
automatically whenever the system boots up:
--------- /etc/init.d/earthworm ---------
#!/bin/sh
# /etc/init.d script to start/stop earthworm under Solaris
#
# Change the value of PARAM_DIR to reflect the earthworm
# configuration which is to be started at boot time
#
PARAM_DIR=/home/earthworm/run_test/params
case "$1" in
'start')
# Verify processes not already running
PROCESS_LIST="startstop"
for PROC in $PROCESS_LIST; do
id=`/usr/bin/ps -ef | /usr/bin/grep $PROC | /usr/bin/grep -v grep | /usr/bin/awk '{print $2}'`
if test -n "$id"
then
echo "$PROC already running"
exit 1
fi
done
# Start up from a known location
cd /tmp
echo "starting earthworm"
# Source the CTS configuration
if [ -f $PARAM_DIR/ew_sol_sparc.cmd ] ; then
csh -c "source $PARAM_DIR/ew_sol_sparc.cmd >& /dev/null; startstop >& /dev/null &"
else
echo "$PARAM_DIR/ew_sol_sparc.cmd file not found. Exitting."
fi
# Start the processes
;;
'stop')
# Stop from a known location
cd /tmp
echo "Stopping earthworm"
# Source the CTS configuration
if [ -f $PARAM_DIR/ew_sol_sparc.cmd ] ; then
csh -c "source $PARAM_DIR/ew_sol_sparc.cmd >& /dev/null; pau >& /dev/null"
else
echo "$PARAM_DIR/ew_sol_sparc.cmd file not found. Exitting."
fi
;;
'status')
# Go to a known location
cd /tmp
echo "Getting earthworm status"
# Source the CTS configuration
if [ -f $PARAM_DIR/ew_sol_sparc.cmd ] ; then
csh -c "source $PARAM_DIR/ew_sol_sparc.cmd >& /dev/null; status"
else
echo "$PARAM_DIR/ew_sol_sparc.cmd file not found. Exitting."
fi
;;
*)
echo "Usage: /etc/init.d/earthworm { start | stop | status }"
;;
esac
After the value of the PARAM_DIR has been changed to reflect the path
to the local configuration directory, the script should be installed as
/etc/init.d/earthworm on the target machine. Make sure that the
permissions on it are 755.
Now, create the following soft links. You will need to be logged in as
superuser to do this:
# ln -s /etc/init.d/earthworm /etc/rc3.d/S99earthworm
# ln -s /etc/init.d/earthworm /etc/rc2.d/K10earthworm
# ln -s /etc/init.d/earthworm /etc/rc0.d/K10earthworm
Just FYI: the first link tells Solaris to start earthworm when booting
into multi-user state (run level 3). The next two links tell it to
gracefully quit earthworm when going either into single user mode or
shutting down completely.
Once this is done, earthworm will start automatically at boot time.
Also, the /etc/init.d/earthworm command can be used to start, stop, or
get status from, earthworm:
> /etc/init.d/earthworm start
> /etc/init.d/earthworm stop
> /etc/init.d/earthworm status
RUNNING AS NON-ROOT USER
The procedure above is fairly simple -- it makes earthworm start
automatically at boot time. In addition, the /etc/init.d/earthworm
script can be a useful tool for all users on the system to quickly
start, stop or get status from Earthworm.
The major drawback of this procedure is that Earthworm runs as root
(superuser) when it is started at boot time. Some sites find this
inconvenient. Unfortunately, there is not an easy and elegent way to
have Solaris start up a process during boot time without that process
being run by root. The version of the /etc/init.d/earthworm script
below gets around this problem. It introduces another variable USER
which should be set to the username under which Earthworm should be
started:
--------- /etc/init.d/earthworm ---------
#!/bin/sh
# /etc/init.d script to start/stop earthworm under Solaris
# Change USER to the user you want earthworm to run as.
# Change the value of PARAM_DIR to reflect the earthworm
# configuration which is to be started at boot time.
#
USER=ppicker
PARAM_DIR=/home/earthworm/run/params
ENV_FILE=ew_sol_sparc.cmd
case "$1" in
'start')
# Verify processes not already running
PROCESS_LIST="startstop"
for PROC in $PROCESS_LIST; do
id=`/usr/bin/ps -ef | /usr/bin/grep $PROC | /usr/bin/grep -v grep | /usr/bin/awk '{print $2}'`
if test -n "$id"
then
echo "$PROC already running"
exit 1
fi
done
# Start up from a known location
cd /tmp
echo "starting earthworm as $USER"
# Source the CTS configuration
if [ -f $PARAM_DIR/$ENV_FILE ] ; then
su $USER -c "source $PARAM_DIR/$ENV_FILE >& /dev/null; startstop >& /dev/null &"
else
echo "$PARAM_DIR/$ENV_FILE file not found. Exiting."
fi
# Start the processes
;;
'stop')
# Stop from a known location
cd /tmp
echo "Stopping earthworm as $USER"
# Source the CTS configuration
if [ -f $PARAM_DIR/$ENV_FILE ] ; then
su $USER -c "source $PARAM_DIR/$ENV_FILE >& /dev/null; pau >& /dev/null"
else
echo "$PARAM_DIR/$ENV_FILE file not found. Exiting."
fi
;;
'status')
# Go to a known location
cd /tmp
echo "Getting earthworm status"
# Source the CTS configuration
if [ -f $PARAM_DIR/ew_sol_sparc.cmd ] ; then
csh -c "source $PARAM_DIR/ew_sol_sparc.cmd >& /dev/null; status"
else
echo "$PARAM_DIR/ew_sol_sparc.cmd file not found. Exiting."
fi
;;
*)
echo "Usage: /etc/init.d/earthworm { start | stop | status }"
;;
esac
The main advantage of the script above is that it will run Earthworm as
the user defined by the USER variable, whenever it is invoked. One
major drawback of this scheme, however, is that the
/etc/init.d/earthworm script, when executed by a non-superuser, will
prompt for the password of the user defined by the USER variable.
Some sites may want to use this quirk as a "security feature." For
example, if a "dummy account" is created (say, username earthworm) and
the USER variable is set to earthworm, then only those users on the
system who know the password for the user earthworm will be able to
start and stop earthworm using the /etc/init.d/earthworm script. This
may server as a very rudimentary security feature on a multi-user
Solaris system.
CHANGING THE CONFIGURATION DIRECTORY
Whenever a new configuration directory is desired, the
/etc/init.d/earthworm script must be edited, and the value of the
PARAM_DIR variable updated to reflect the new path to the configuration
directory.