[wellylug] Running a command in the background which expects keyboard entry
David Harrison
david.harrison at stress-free.co.nz
Sat Jun 25 13:12:51 NZST 2005
Thanks for the assistance.
I now have a functional init.d script for iFolder (based on the Suse
template)
For anyone interested I've included it below.
If you're interested in compiling your own iFolder simple server
there's some simple to follow instructions here:
http://forge.novell.com/modules/xfmod/cvs/cvsbrowse.php/*checkout*/
ifolder/ifolder/HOWTOs/SimpleServer-Setup-HOWTO.txt
It worked fine for me on Suse 9.2 and there is prebuilt clients for
Windows, Linux and OSX.
Regards,
David
/etc/init.d/ifolder
-------------------------------------------------
#! /bin/sh#
# /etc/init.d/ifolder
#
# and its symbolic link
#
# /usr/sbin/rcifolder
#
# System startup script for the iFolder Simple Server (Simias)
#
### BEGIN INIT INFO
# Provides: ifolder
# Required-Start: $local_fs $remote_fs
# X-UnitedLinux-Should-Start: $named $syslog $time
# Required-Stop: $local_fs $remote_fs
# X-UnitedLinux-Should-Stop: $named $syslog $time
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: iFolder Simple Server
# Description: Start iFolder Simple Server to serve iFolder Clients
### END INIT INFO
SIMIAS_BASE="/opt/simias"
simiasIsRunning()
{
simias_ps_log=`mktemp /var/tmp/simias-ps.log.XXXXXX`
ps aux --cols 1024 >"$simias_ps_log"
simias_is_running="false"
if grep " mono $SIMIAS_BASE/bin/SimiasServer.exe" "$simias_ps_log"
>/dev/null 2>/dev/null ; then
simias_is_running="true"
fi
rm -f "$simias_ps_log"
test "$simias_is_running" = "true"
}
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status
# First reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
case "$1" in
start)
echo -n "Starting iFolder Server ($SIMIAS_BASE)"
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.
# NOTE: startproc return 0, even if service is
# already running to match LSB spec.
if simiasIsRunning ; then
rc_failed 0
else
screen -dmS ifolder su ifolder -c "$SIMIAS_BASE/bin/simias"
sleep 3
if simiasIsRunning ; then
rc_failed 0
else
rc_failed 7
fi
fi
rc_status -v
;;
stop)
echo -n "Shutting down iFolder Server ($SIMIAS_BASE)"
if simiasIsRunning ; then
killall simias
# wait 60 sec for stop at maximum
wait_sec=60
while [ "$wait_sec" != "0" ] ; do
sleep 1
if ! simiasIsRunning ; then
# the iFolder server is stoped, end the loop
wait_sec=0
break
fi
wait_sec=$((wait_sec -1))
done
# check the final status
if simiasIsRunning ; then
rc_failed 1
else
rc_failed 0
fi
else
rc_failed 0
fi
# Remember status and be verbose
rc_status -v
;;
try-restart)
## Stop the service and if this succeeds (i.e. the
## service was running before), start it again.
## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
$0 status >/dev/null && $0 restart
# Remember status and be quiet
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart.
echo -n "Reload service iFolder Server $($SIMIAS_BASE)"
## if it supports it:
#killproc -HUP $TOMCAT_BIN
#touch /var/run/FOO.pid
#rc_status -v
## Otherwise:
$0 stop && $0 start
rc_status
;;
reload)
## Like force-reload, but if daemon does not support
## signalling, do nothing (!)
## Otherwise if it does not support reload:
rc_failed 3
rc_status -v
;;
status)
echo -n "Checking for Simias ($SIMIAS_BASE)"
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
# Status has a slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running
# NOTE: checkproc returns LSB compliant status values.
if simiasIsRunning ; then
rc_failed 0
else
rc_failed 3
fi
rc_status -v
;;
probe)
## Optional: Probe for the necessity of a reload,
## give out the argument which is required for a reload.
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-
reload|reload|probe}"
exit 1
;;
esac
rc_exit
More information about the wellylug
mailing list