<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 07/19/2011 05:59 PM, Fulko Hew wrote:
    <blockquote
cite="mid:CAGuV3hPP-iyCqG0O6R-+6QnTr8ezp372gRPGTheFa490euNO_A@mail.gmail.com"
      type="cite"><font face="courier new,monospace"><br>
      </font><br>
      <div class="gmail_quote">On Tue, Jul 19, 2011 at 1:48 PM, Jeff
        Spaleta <span dir="ltr">&lt;<a moz-do-not-send="true"
            href="mailto:jspaleta@gmail.com">jspaleta@gmail.com</a>&gt;</span>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex;">
          <div class="im">On Tue, Jul 19, 2011 at 8:51 AM, seth vidal
            &lt;<a moz-do-not-send="true"
              href="mailto:skvidal@fedoraproject.org">skvidal@fedoraproject.org</a>&gt;
            wrote:<br>
            &gt; I agree with one section of your argument:<br>
            &gt; &nbsp;arguments which are just "I'm not used to this" are
            bad arguments.<br>
            &gt;<br>
            &gt; Many of the arguments presented in this &nbsp;and other
            threads do not boil<br>
            &gt; down to that. If you believe them to do so, Jeff, then
            you're presenting<br>
            &gt; a straw man as I'm sure you're aware.<br>
            <br>
          </div>
          I disagree this thread specifically boils down to familiarity<br>
          argument. &nbsp;Shall I break down the original post point by
          point?</blockquote>
        <div>&nbsp;<br>
          ... snip ...<br>
        </div>
        <div>&nbsp;</div>
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;">
          &nbsp;- transparency of code due to shell use<br>
          <br>
          how is shell more transparent? &nbsp;from my meager understanding
          of<br>
          systemd we are actually getting better more systematic failure
          and<br>
          logging information from systemd unit files than we get from
          the<br>
          complexity of shell scripts. Are we not?<br>
        </blockquote>
      </div>
      <br>
      Up until now, my package is architecture independent.<br>
      <br>
      From what I understand, I will now have to provide some systemd<br>
      application that is coded in C?<br>
      If that is the case, I now have to create an RPM per-architecture<br>
      and loose my architecture independence.<br>
      <br>
      True or false?<br>
      <br>
    </blockquote>
    <br>
    False<br>
    <br>
    Hum best is to provide you with example which daemon do you maintain
    I can convert it for you and provide it to you as an example anyway
    here's an example of a systemd unit that I converted sometime ago
    for a know application named tomcat6 and I'll leave readers to be
    the judge of that what is harder to understand the native systemd
    unit or the legacy sysv init script...<br>
    <br>
    First the converted unit file <br>
    <br>
    # cat /lib/systemd/system/tomcat6.service <br>
    [Unit]<br>
    Description=Apache Tomcat Web Applications Server<br>
    After=systlog.target network.target<br>
    <br>
    [Service]<br>
    Type=forking<br>
    EnvironmentFile=-/etc/sysconfig/tomcat6<br>
    ExecStart=/usr/sbin/tomcat6 start<br>
    ExecStop=/usr/sbin/tomcat6 stop<br>
    <br>
    [Install]<br>
    WantedBy=multi-user.target<br>
    <br>
    <br>
    Now the legacy sysv init script that everybody seem to love and
    cheerish so much...&nbsp; <br>
    <br>
    # cat /etc/rc.d/init.d/tomcat6 <br>
    #!/bin/bash<br>
    #<br>
    # tomcat6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This shell script takes care of starting and stopping
    Tomcat<br>
    #<br>
    # chkconfig: - 80 20<br>
    #<br>
    ### BEGIN INIT INFO<br>
    # Provides: tomcat6<br>
    # Required-Start: $network $syslog<br>
    # Required-Stop: $network $syslog<br>
    # Default-Start:<br>
    # Default-Stop:<br>
    # Description: Release implementation for Servlet 2.5 and JSP 2.1<br>
    # Short-Description: start and stop tomcat<br>
    ### END INIT INFO<br>
    #<br>
    # - originally written by Henri Gomez, Keith Irwin, and Nicolas
    Mailhot<br>
    # - heavily rewritten by Deepak Bhole and Jason Corley<br>
    #<br>
    <br>
    ## Source function library.<br>
    #. /etc/rc.d/init.d/functions<br>
    # Source LSB function library.<br>
    if [ -r /lib/lsb/init-functions ]; then<br>
    &nbsp;&nbsp;&nbsp; . /lib/lsb/init-functions<br>
    else<br>
    &nbsp;&nbsp;&nbsp; exit 1<br>
    fi<br>
    <br>
    DISTRIB_ID=`lsb_release -i -s 2&gt;/dev/null`<br>
    <br>
    NAME="$(basename $0)"<br>
    unset ISBOOT<br>
    if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then<br>
    &nbsp;&nbsp;&nbsp; NAME="${NAME:3}"<br>
    &nbsp;&nbsp;&nbsp; ISBOOT="1"<br>
    fi<br>
    <br>
    # For SELinux we need to use 'runuser' not 'su'<br>
    if [ -x "/sbin/runuser" ]; then<br>
    &nbsp;&nbsp;&nbsp; SU="/sbin/runuser -s /bin/sh"<br>
    else<br>
    &nbsp;&nbsp;&nbsp; SU="/bin/su -s /bin/sh"<br>
    fi<br>
    <br>
    # Get the tomcat config (use this for environment specific settings)<br>
    TOMCAT_CFG="/etc/tomcat6/tomcat6.conf"<br>
    if [ -r "$TOMCAT_CFG" ]; then<br>
    &nbsp;&nbsp;&nbsp; . $TOMCAT_CFG<br>
    fi<br>
    # Get instance specific config file<br>
    if [ -r "/etc/sysconfig/${NAME}" ]; then<br>
    &nbsp;&nbsp;&nbsp; . /etc/sysconfig/${NAME}<br>
    fi<br>
    <br>
    <br>
    # Define which connector port to use<br>
    CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"<br>
    <br>
    # Path to the tomcat launch script<br>
    TOMCAT_SCRIPT="/usr/sbin/tomcat6"<br>
    <br>
    # Tomcat program name<br>
    TOMCAT_PROG="${NAME}"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
    # Define the tomcat username<br>
    TOMCAT_USER="${TOMCAT_USER:-tomcat}"<br>
    <br>
    # Define the tomcat log file<br>
    TOMCAT_LOG="${TOMCAT_LOG:-${CATALINA_HOME}/logs/catalina.out}"<br>
    <br>
    RETVAL="0"<br>
    <br>
    # Look for open ports, as the function name might imply<br>
    function findFreePorts() {<br>
    &nbsp;&nbsp;&nbsp; local isSet1="false"<br>
    &nbsp;&nbsp;&nbsp; local isSet2="false"<br>
    &nbsp;&nbsp;&nbsp; local isSet3="false"<br>
    &nbsp;&nbsp;&nbsp; local lower="8000"<br>
    &nbsp;&nbsp;&nbsp; randomPort1="0"<br>
    &nbsp;&nbsp;&nbsp; randomPort2="0"<br>
    &nbsp;&nbsp;&nbsp; randomPort3="0"<br>
    &nbsp;&nbsp;&nbsp; local -a listeners="( $(<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; netstat -ntl | \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; awk '/^tcp/ {gsub("(.)*:", "", $4); print
    $4}'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) )"<br>
    &nbsp;&nbsp;&nbsp; while [ "$isSet1" = "false" ] || \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "$isSet2" = "false" ] || \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "$isSet3" = "false" ]; do<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let port="${lower}+${RANDOM:0:4}"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -z `expr " ${listeners[*]} " : ".*\( $port \).*"` ];
    then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$isSet1" = "false" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export randomPort1="$port"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isSet1="true"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif [ "$isSet2" = "false" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export randomPort2="$port"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isSet2="true"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif [ "$isSet3" = "false" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export randomPort3="$port"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isSet3="true"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; done<br>
    }<br>
    <br>
    function makeHomeDir() {<br>
    &nbsp;&nbsp;&nbsp; if [ ! -d "$CATALINA_HOME" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "$CATALINA_HOME does not exist, creating"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ ! -d "/usr/share/${NAME}" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mkdir /usr/share/${NAME}<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp -pLR /usr/share/tomcat6/* /usr/share/${NAME}<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mkdir -p /var/log/${NAME} \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/cache/${NAME} \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/tmp/${NAME}<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ln -fs /var/cache/${NAME} ${CATALINA_HOME}/work<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ln -fs /var/tmp/${NAME} ${CATALINA_HOME}/temp<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp -pLR /usr/share/${NAME}/bin $CATALINA_HOME<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp -pLR /usr/share/${NAME}/conf $CATALINA_HOME<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ln -fs /usr/share/java/tomcat6 ${CATALINA_HOME}/lib<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ln -fs /usr/share/tomcat6/webapps ${CATALINA_HOME}/webapps<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chown ${TOMCAT_USER}:${TOMCAT_USER} /var/log/${NAME}<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    }<br>
    <br>
    function parseOptions() {<br>
    &nbsp;&nbsp;&nbsp; options=""<br>
    &nbsp;&nbsp;&nbsp; options="$options $(<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; awk '!/^#/ &amp;&amp; !/^$/ { ORS=" "; print
    "export ", $0, ";" }' \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $TOMCAT_CFG<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )"<br>
    &nbsp;&nbsp;&nbsp; if [ -r "/etc/sysconfig/${NAME}" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; options="$options $(<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; awk '!/^#/ &amp;&amp; !/^$/ { ORS=" "; <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "export ", $0, ";"
    }' \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/sysconfig/${NAME}<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )"<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; TOMCAT_SCRIPT="$options ${TOMCAT_SCRIPT}"<br>
    }<br>
    <br>
    # See how we were called.<br>
    function start() {<br>
    &nbsp; <br>
    &nbsp;&nbsp; echo -n "Starting ${TOMCAT_PROG}: "<br>
    &nbsp;&nbsp; if [ "$RETVAL" != "0" ]; then <br>
    &nbsp;&nbsp;&nbsp;&nbsp; log_failure_msg<br>
    &nbsp;&nbsp;&nbsp;&nbsp; return<br>
    &nbsp;&nbsp; fi<br>
    &nbsp;&nbsp; if [ -f "/var/lock/subsys/${NAME}" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f "/var/run/${NAME}.pid" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read kpid &lt; /var/run/${NAME}.pid<br>
    #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if checkpid $kpid 2&gt;&amp;1; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -d "/proc/${kpid}" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; # fix permissions on the log and pid files<br>
    &nbsp;&nbsp;&nbsp; export CATALINA_PID="/var/run/${NAME}.pid"<br>
    &nbsp;&nbsp;&nbsp; touch $CATALINA_PID 2&gt;&amp;1 || RETVAL="4"<br>
    &nbsp;&nbsp;&nbsp; if [ "$RETVAL" -eq "0" -a "$?" -eq "0" ]; then <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; [ "$RETVAL" -eq "0" ] &amp;&amp; touch $TOMCAT_LOG 2&gt;&amp;1
    || RETVAL="4" <br>
    &nbsp;&nbsp;&nbsp; if [ "$RETVAL" -eq "0" -a "$?" -eq "0" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chown ${TOMCAT_USER}:${TOMCAT_USER} $TOMCAT_LOG<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; if [ "$CATALINA_HOME" != "/usr/share/tomcat6" -a "$RETVAL" -eq
    "0" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Create a tomcat directory if it doesn't exist<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; makeHomeDir<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If CATALINA_HOME doesn't exist modify port number so that<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # multiple instances don't interfere with each other<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; findFreePorts<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sed -i -e "s/8005/${randomPort1}/g" -e
    "s/8080/${CONNECTOR_PORT}/g" \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -e "s/8009/${randomPort2}/g" -e
    "s/8443/${randomPort3}/g" \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ${CATALINA_HOME}/conf/server.xml<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; parseOptions<br>
    &nbsp;&nbsp;&nbsp; if [ "$RETVAL" -eq "0" -a "$SECURITY_MANAGER" = "true" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security" \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt; ${CATALINA_HOME}/logs/initd.log&nbsp; 2&gt;&amp;1 ||
    RETVAL="4"<br>
    &nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "$RETVAL" -eq "0" ] &amp;&amp; $SU - $TOMCAT_USER -c
    "${TOMCAT_SCRIPT} start" &gt;&gt; ${CATALINA_HOME}/logs/initd.log&nbsp;
    2&gt;&amp;1 || RETVAL="4"<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; if [ "$RETVAL" -eq "0" ]; then <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; touch /var/lock/subsys/${NAME}<br>
    &nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_failure_msg "Error code ${RETVAL}"<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    }<br>
    <br>
    function stop() {<br>
    &nbsp;&nbsp;&nbsp; echo -n "Stopping ${TOMCAT_PROG}: "<br>
    &nbsp;&nbsp;&nbsp; if [ -f "/var/lock/subsys/${NAME}" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parseOptions<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$RETVAL" -eq "0" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; touch /var/lock/subsys/${NAME} 2&gt;&amp;1 || RETVAL="4"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "$RETVAL" -eq "0" ] &amp;&amp; $SU - $TOMCAT_USER -c
    "${TOMCAT_SCRIPT} stop" &gt;&gt; ${CATALINA_HOME}/logs/initd.log
    2&gt;&amp;1 || RETVAL="4"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$RETVAL" -eq "0" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count="0"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f "/var/run/${NAME}.pid" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read kpid &lt; /var/run/${NAME}.pid<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] ||
    \<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ "$count" -gt "$SHUTDOWN_WAIT" ]; do<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$SHUTDOWN_VERBOSE" = "true" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "waiting for processes $kpid to exit"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 1<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let count="${count}+1"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$SHUTDOWN_VERBOSE" = "true" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_warning_msg "killing processes which did
    not stop after ${SHUTDOWN_WAIT} seconds"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kill -9 $kpid<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm -f /var/lock/subsys/${NAME} /var/run/${NAME}.pid<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_failure_msg<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="4"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="0"<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp; if [ "$DISTRIB_ID" = "MandrivaLinux" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo<br>
    &nbsp;&nbsp;&nbsp; fi<br>
    }<br>
    <br>
    function usage()<br>
    {<br>
    &nbsp;&nbsp; echo "Usage: $0
{start|stop|restart|condrestart|try-restart|reload|force-reload|status|version}"<br>
    &nbsp;&nbsp; RETVAL="2"<br>
    }<br>
    <br>
    # See how we were called.<br>
    RETVAL="0"<br>
    case "$1" in<br>
    &nbsp;&nbsp;&nbsp; start)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; stop)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; restart)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; condrestart|try-restart)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f "/var/run/${NAME}.pid" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; reload)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="3"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; force-reload)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f "/var/run/${NAME}.pid" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; status)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f "/var/run/${NAME}.pid" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read kpid &lt; /var/run/${NAME}.pid<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -d "/proc/${kpid}" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg "${NAME} (pid ${kpid}) is
    running..."<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="0"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
    # The pid file exists but the process is not running<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_warning_msg "PID file exists, but process is not
    running"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="1"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pid="$(/usr/bin/pgrep -d , -u ${TOMCAT_USER} -G
    ${TOMCAT_USER} java)"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -z "$pid" ]; then<br>
    #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; status ${NAME}<br>
    #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="$?"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg "${NAME} is stopped"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="3"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_success_msg "${NAME} (pid $pid) is running..."<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="0"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -f /var/lock/subsys/${NAME} ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pid="$(/usr/bin/pgrep -d , -u ${TOMCAT_USER} -G
    ${TOMCAT_USER} java)"<br>
    # The lockfile exists but the process is not running<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ -z "$pid" ]; then<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_failure_msg "${NAME} lockfile exists but process
    is not running"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETVAL="2"<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; version)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ${TOMCAT_SCRIPT} version<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    &nbsp;&nbsp;&nbsp; *)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usage<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br>
    esac<br>
    <br>
    exit $RETVAL<br>
    <br>
  </body>
</html>