[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