Opensuse 13.1 - create service file for script

setup:
OPENSUSE 13.1
firewall is DISABLED

Hi,

  I have a working script below that I am trying to get to run at startup with sudo privileges.

location:  /opt/dcm4chee-2.18.0-mysql/bin/radarch4.sh

#!/bin/sh
#
# dcm4chee Control Script
#
# To use this script
# run it as root - it will switch to the specified user
# It loses all console output - use the log.
#
# Here is a little (and extremely primitive)
# startup/shutdown script for SuSE systems. It assumes
# that JBoss lives in /usr/local/dcm4chee, it's run by user
# 'pacs' and JDK binaries are in /usr/java/jdk/bin. All
# this can be changed in the script itself.
#
# Either amend this script for your requirements
# or just ensure that the following variables are set correctly
# before calling the script.
#
### BEGIN INIT INFO
# Provides:       dcm4chee
# Required-Start: $PACS_DB
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Start the DCM4CHEE DICOM Image Manager
### END INIT INFO

#define where jboss is - this is the directory containing directories log, bin, conf etc
JBOSS_HOME=${JBOSS_HOME:-"/opt/dcm4chee-2.18.0-mysql"}

#make java is on your path
JAVAPTH=${JAVAPTH:-"/usr/java/jdk1.7.0_67/bin"}

#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"}

#configuration to use, usually one of 'minimal', 'default', 'all'
JBOSS_CONF=${JBOSS_CONF:-"default"}

# JMX console credentials
JBOSS_ADMIN_USER=${JBOSS_ADMIN_USER:-"admin"}
JBOSS_ADMIN_PASS=${JBOSS_ADMIN_PASS:-"admin"}
ADMIN_USER_OPT="-u $JBOSS_ADMIN_USER"
ADMIN_PASS_OPT="-p $JBOSS_ADMIN_PASS"


#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF"}

# 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_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 - misc error
# 2 - invalid or excess args
# 3 - unimplemented feature (e.g. reload)
# 4 - insufficient privilege
# 5 - program not installed
# 6 - program not configured
#
# 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.

if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
  # ensure the file exists
  touch $JBOSS_CONSOLE
fi

if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
  echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE"
  echo "WARNING: ignoring it and using /dev/null"
  JBOSS_CONSOLE="/dev/null"
fi

#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/var/log/jboss/jboss.log"}

#define the user under which jboss will run, or use RUNASIS to run as the current user
JBOSSUS=${JBOSSUS:-"root"}

CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
CMD_STOP="java -classpath $JBOSSCP org.jboss.Shutdown --shutdown $ADMIN_USER_OPT $ADMIN_PASS_OPT"

if [ "$JBOSSUS" = "RUNASIS" ]; then
  SUBIT=""
else
  SUBIT="su - $JBOSSUS -c "
fi

if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
  export PATH=$PATH:$JAVAPTH
fi

if [ ! -d "$JBOSS_HOME" ]; then
  echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
  exit 1
fi

case "$1" in
start)
    echo -n "Starting JBoss application server: "
    cd $JBOSS_HOME/bin
    if [ -z "$SUBIT" ]; then
        eval $CMD_START >${JBOSS_CONSOLE} 2>&1 &
    else
        $SUBIT "$CMD_START >${JBOSS_CONSOLE} 2>&1 &"
    fi

    # Remember status and be verbose
    rc_status -v
    ;;
stop)
    echo -n "Shutting down JBoss application server: "
    if [ -z "$SUBIT" ]; then
        $CMD_STOP
    else
        $SUBIT "$CMD_STOP"
    fi

    # Remember status and be verbose
    rc_status -v
    ;;
restart)
    $0 stop
    $0 start

    # Remember status and be quiet
    rc_status
    ;;
*)
    echo "usage: $0 (start|stop|restart|help)"
esac

Open in new window


I have also created a service file here --> '/usr/lib/systemd/system/radarch4.service'

contents of that file:

[Unit]
Description=Dcm4chee Archive service on RADARCH4

[Service]
Type=oneshot
ExecStart=/opt/dcm4chee-2.18.0-mysql/bin/radarch4.sh start
ExecStop=/opt/dcm4chee-2.18.0-mysql/bin/radarch4.sh stop
ExecRestart=/opt/dcm4chee-2.18.0-mysql/bin/radarch4.sh restart
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Open in new window


The service DOES runs at startup, but does not run as 'root' at startup.  What the 'radarch4.sh' script does is it runs the '$JBOSS_HOME/bin/run.sh' script as well which needs to run as 'root' because it needs to listen on TCP 104, Which is a port below 1024 and needs sudo for it to be open.

The system autologs in as the user 'pacs' and after the service starts, I can kill it and then run it as 'sudo systemctl start radarch4.service' and it starts with the open port of 104.

How can I get around this?
doc_jayAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

gheistCommented:
You dont need to do anything
put script in /etc/init.d
chmod+x
chkconfig -add

and systemd will run your SystemV startup script just fine.
0
doc_jayAuthor Commented:
do i even need the 'radarch4.service' file?  How will I start/stop my script when needed?

thanks
0
gheistCommented:
no you do not need .service file ;)


sysv services will work with upstart in ubuntu just like with systemd you see here....
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

doc_jayAuthor Commented:
okay, I'll give it a shot in Opensuse.  How can I 'deregister' my 'radarch4' service after I have already made it aware of it?  Is just removing the radarch4.service file enough for it to not be aware of it any longer?

thanks
0
gheistCommented:
I think it is systemctl daemon-reload to reload all disk configuration
0
doc_jayAuthor Commented:
this didn't work out as I had hoped.  The script did run, just as before with the .service file, but still, port 104 was NOT open.
0
gheistCommented:
Does the script /opt/dcm4chee-2.18.0-mysql/bin/radarch4.sh run manually?
And with bash -x ?
0
doc_jayAuthor Commented:
yes, it does run manually, but it needs sudo.  Sorry, when you say 'bash -x' do you mean have 'execute' priv, then yes.  It does have that privilege.  Its owned by 'root' for the user/group.
0
gheistCommented:
bash -x traces all lines.

Does it start in single mode?
Maybe it requires mysql or network?
0
doc_jayAuthor Commented:
This does require mysql and network, as it needs to talk to mysql over 3306 and open up port 104 for listening.
0
gheistCommented:
So it requires network

Add to
Required-Start: network
Required-Stop: network

Without dollar sign *see inside /etc/init.d/network for answer why
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
doc_jayAuthor Commented:
I ended up moving to centos 7 and using authbind.  Works as expected.    I appreciate all of the comments/suggestions.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Linux Distributions

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.