0

I have a python script that works very well executed from a (remote) console like this :

sudo /srv/web-asset-server-master/python server.py

The problem is, that it only lives as long as the console window is open. So I want to run it as a service, but this seems to be more tricky that I thought. Have followed this recipe -> https://www.novell.com/coolsolutions/feature/15380.html (and read similar questions here on Unix & Linux like How to run my script after SuSE finished booting up?

By following all the fundamentals in the above mentioned Creating Custom init Scripts I have made this :

#! /bin/sh
# Copyright (c) 2015 NHMD / specify
# All rights reserved.
#
# Author: Ben Anhalt, 2015
#
# /etc/init.d/attachment-server
#   and its symbolic link
# /usr/sbin/attachment-server

### BEGIN INIT INFO
# Provides:          attachment-server
# Required-Start:    $network
# Required-Stop:
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: Specify attachment server
# Description:       The attachment server is storage medie for Specify attachments 
#       service.  We want it to be active in runlevels 3
#       and 5, as these are the runlevels with the network
#       available.
### END INIT INFO

# Check for missing binaries
ATT_BIN=/srv/web-asset-server-master/python server.py
test -x $ATT_BIN || { echo "$ATT_BIN not installed";
        if [ "$1" = "stop" ]; then exit 0;
        else exit 5; fi; }

# Load the rc.status script for this service.
. /etc/rc.status

# Reset status of this service
rc_reset

case "$1" in
    start)
        echo -n "Starting attachment server "
        ## Start daemon with startproc(8). If this fails
        ## the return value is set appropriately by startproc.
        startproc $ATT_BIN

        # Remember status and be verbose
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down attachment server "
        ## Stop daemon with killproc(8) and if this fails
        ## killproc sets the return value according to LSB.

        killproc -TERM $ATT_BIN

        # Remember status and be verbose
        rc_status -v
        ;;
   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
        ;;
    reload)
        # If it supports signaling:
        echo -n "Reload service attachment server "
        killproc -HUP $ATT_BIN
        #touch /var/run/BAR.pid
        rc_status -v

        ## Otherwise if it does not support reload:
        #rc_failed 3
        #rc_status -v
        ;;
    status)
        echo -n "Checking for service attachment-server "
        ## Check status with checkproc(8), if process is running
        ## checkproc will return with exit status 0.

        # Return value is slightly different for the status command:
        # 0 - service up and running
        # 1 - service dead, but /var/run/  pid  file exists
        # 2 - service dead, but /var/lock/ lock file exists
        # 3 - service not running (unused)
        # 4 - service status unknown :-(
        # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

        # NOTE: checkproc returns LSB compliant status values.
        checkproc $ATT_BIN
        # NOTE: rc_status knows that we called this init script with
        # "status" option and adapts its messages accordingly.
        rc_status -v
        ;;
    *)
        ## If no parameters are given, print which are avaiable.
        echo "Usage: $0 {start|stop|status|restart|reload}"
        exit 1
        ;;
esac

rc_exit

It is the most simple example with the service name and script path changed. And the "attachment-server" is now actually registered by YAST in System -> System Services, but when I try to enable it I get the error

/etc/init.d/attachment-server start returned 2 (invalid or excess arguments)

What could possible be wrong? I cannot figure out where this script should be wrong. It basically just need to execute a single script, thats it.

Must say I am completely novice on SLES.

1

Your line

ATT_BIN=/srv/web-asset-server-master/python server.py

is setting variable ATT_BIN and then executing server.py. Normally, ATT_BIN should be a the full pathname to a single file to execute, for example /home/me/server.py, if that is where your python script is.

Usually, server.py is changed so that the first line is, in your case:

#!/srv/web-asset-server-master/python

Then you dont need to specify the interpreter when you run it, and can just set

ATT_BIN=/home/me/server.py

Make sure you set the executable permissions on your python file, eg:

chmod a+rx /home/me/server.py

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.