Hi all!

I've been looking around the net to see if I can find a solution, but to
no avail, so I'm writing this in the hope that somebody can shed some
light or point me in the right direction.

I'm trying to write a SMF manifest for a DDNS client (inadyn), but for
some reason, svc.startd fails to notice that the daemon has started, and
I have no clue how to tell it which process it is or find out what is
going wrong.

Let's start with the failure I have:

-bash-3.00$ svcs -xv inadyn
svc:/network/ddns/client:inadyn (Dynamic DNS client)
 State: maintenance since Mon Nov 13 12:07:39 2006
Reason: Restarting too quickly.
   See: http://sun.com/msg/SMF-8000-L5
   See: man -M /usr/local/man -s 8 inadyn
   See: /var/svc/log/network-ddns-client:inadyn.log
Impact: This service is not running.

and in the tail of the log, there is:

-bash-3.00$ tail -20 /var/svc/log/network-ddns-client\:inadyn.log
[ Nov 13 19:14:11 Executing start method
("/usr/local/lib/svc/method/inadyn-client start") ]
'inadyn' is already running
[ Nov 13 19:14:12 Method "start" exited with status 0 ]
[ Nov 13 19:14:12 Stopping because all processes in service exited. ]
[ Nov 13 19:14:12 Executing stop method (:kill) ]
[ Nov 13 19:14:13 Executing start method
("/usr/local/lib/svc/method/inadyn-client start") ]
'inadyn' is already running
[ Nov 13 19:14:14 Method "start" exited with status 0 ]
[ Nov 13 19:14:14 Stopping because service disabled. ]
[ Nov 13 19:14:14 Executing stop method (:kill) ]

The manifest is attached, but the start method is:

        <exec_method type='method' name='start'
                     exec='/usr/local/lib/svc/method/inadyn-client %m'
                     timeout_seconds='300'>
          <method_context>
            <method_credential user="root" group="root"/>
          </method_context>
        </exec_method>

which uses the inadyn-client script (that I wrote), containing the
following lines (code edited):

#!/sbin/sh

. /lib/svc/share/smf_include.sh

NAME=inadyn
DAEMON=/usr/local/bin/$NAME
    .
    .
    .
case $1 in
    start)
        if [ ! -x $DAEMON ]; then
            echo "$DAEMON is not executable, not starting"
            exit $SMF_EXIT_ERR_CONFIG
        fi
        if [ ! -r $CONF ]; then
            echo "$CONF not readable, not starting"
            exit $SMF_EXIT_ERR_CONFIG
        fi
        if pgrep $NAME >/dev/null; then
            echo "'$NAME' is already running"
        else
            $DAEMON &
            sleep 1
        fi
        ;;
            .
            .
            .
esac

exit $SMF_EXIT_OK

When I call the 'inadyn-client' script directly, the daemon starts well
and keeps going without a glitch, but when svc.startd tries to start it,
it decides somehow that "all processes in the service exited". AFAICT,
this is not the case.

So, the questions are:
- How do svc.startd decide if a process is in the service?
- Is there a way to find out what is going wrong?

Best wishes,
Mats Kindahl
-- 
Mats Kindahl
Replication Team
MySQL AB, www.mysql.com



-------------- next part --------------
A non-text attachment was scrubbed...
Name: mats.vcf
Type: text/x-vcard
Size: 199 bytes
Desc: not available
URL: 
<http://mail.opensolaris.org/pipermail/smf-discuss/attachments/20061113/d8887677/attachment.vcf>

Reply via email to