[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

20050509: logging script output via ldmd.conf exec command



Hi Angelo,

> To: <address@hidden>
> From: "Alvarez, Angelo CIV NAVPACMETOCCEN JTWC" <address@hidden>
> Subject: logging script output via ldmd.conf exec command
> Organization: > NAVPACMETOCCEN/JTWC
> Keywords: 200505032047.j43KlHP3009221

The above message contained the following:

> Aloha.  My ldmd.conf has the following line:
> exec    "/usr/ldm/scripts/Ingest.ksh >> /usr/ldm/logs/ingest/ingest.log"
> 
> Is this correct? I ask b/c the log file was not created when I =
> restarted ldm but was created when I run:
> 
> /usr/ldm/scripts/Ingest.ksh >> /usr/ldm/logs/ingest/ingest.log at the =
> command line.

The above didn't work because EXEC entries in the LDM
configuration-file, ldmd.conf, are executed via the execvp() system-call
-- which doesn't understand shell redirection syntax (e.g., ">>"). One
solution is to pass the pathname of the logfile to the script as an
argument, e.g.,

    exec        "/usr/ldm/scripts/Ingest.ksh /usr/ldm/logs/ingest/ingest.log"

The script can then append to the logfile.  For example, having the
following near the beginning of the script will redirect all
standard-output to the file named by the first argument:

    exec >> $1

If you, instead, wanted to redirect standard-error to that file, then
you could have

    exec 2>> $1

And if you wanted to redirect both the standard-output and standard-error
streams:

    exec >> $1 2>&1

> Also wanted to verify that my Ingest.ksh script is configured correctly =
> to work with LDM b/c not all of my pqinsert logs are updating as =
> expected.
> 
> Here is the source (note: all files are copied to a "backup" directory =
> just in case of problems):
> 
> #!/bin/ksh
> 
> input_dir=3D/comms_dir/ddn/fnoc/
> ls $input_dir
> echo "Input_Dir: $input_dir"
> GRIDLOG=3D/usr/ldm/logs/ingest/pqinsert.grid.log
> WMOLOG=3D/usr/ldm/logs/ingest/pqinsert.wmo.log
> NPOINTLOG=3D/usr/ldm/logs/ingest/pqinsert.npoint.log
> 
> cd ${input_dir}
> while [ 1 ]
> do
>    rm -f ${input_dir}/*BEGIN*
>    for arg in `ls -1`
>    do
>       prefix=3D`echo $arg | cut -c1-4`
>       prefix_grep=3D`echo $prefix | grep -i temp`
>       if [ "XX" !=3D "X${prefix_grep}X" ]
>       then
>        echo "$arg is still coming in, will skip over it for now.."
>       else
>        if [ "XX" !=3D "X`echo $arg | grep GR1`X" ]
>        then=20
>             #echo "NGRID GR1 $arg"
>            cp $arg /comms_dir/oldpsrfiles/$arg
>             pqinsert -l $GRIDLOG -f NGRID $arg
>             rm -f $arg
>        elif [ "XX" !=3D "X`echo $arg | grep IDY | grep grb`X" ]
>        then=20
>             #echo "NGRID GRB $arg"
>             cp $arg /comms_dir/oldpsrfiles/$arg
>             pqinsert -l $GRIDLOG -f NGRID $arg
>             rm -f $arg
>        elif [ "XX" !=3D "X`echo $arg | grep jgsm | grep grib`X" ]
>        then=20
>             #echo "NGRID GRIB $arg"
>             cp $arg /comms_dir/oldpsrfiles/$arg
>             pqinsert -l $GRIDLOG -f NGRID $arg
>             rm -f $arg
>        elif [ "XX" !=3D "X`echo $arg | grep BUFtdp`X" ]
>        then=20
>             #echo "NPOINT $arg"
>             cp $arg /comms_dir/oldpsrfiles/$arg
>             pqinsert -l $NPOINTLOG -f NPOINT $arg
>             rm -f $arg
>        elif [ "XX" !=3D "X`echo $arg | grep AWN | grep TXT`X" ]
>        then=20
>             #echo "WMO TXT $arg"
>             cp $arg /comms_dir/oldpsrfiles/$arg
>             pqinsert -l $WMOLOG -f WMO $arg
>             rm -f $arg
>        elif [ "XX" !=3D "X`echo $arg | grep AWN | grep dat`X" ]
>        then=20
>             #echo "WMO DAT $arg"
>             cp $arg /comms_dir/oldpsrfiles/$arg
>             pqinsert -l $WMOLOG -f WMO $arg
>             rm -f $arg
>        else
>             #echo "UNKNOWN $arg"
>             mv $arg /comms_dir/oldpsrfiles/unknowns
>        fi
>       fi
>    done
>    sleep 10
> done

It looks like the above script uses the standard-output stream instead
of the standard-error stream.  You might want to reconsider that
decision and do something like

    echo 1>&2 "$arg is still coming in, will skip over it for now.."

This assumes that the standard-error stream has been redirected
someplace meaningful.  By default, the standard-error stream of an
EXEC-ed process from the LDM configuration-file will be redirected
to "/dev/console" if possible and "/dev/null, otherwise, unless the
user specifies a logfile pathname to the rpc.ldmd program via the "-l"
argument (and the ldmadmin(1) doesn't).

> v/r
> angelo
> 
> Angelo Alvarez
> System Administrator
> NAVPACMETOCCEN/JTWC
> https://www.npmoc.navy.mil
> email: address@hidden
> phone: 808.471.3645
[snip]

Regards,
Steve Emmerson

> NOTE: All email exchanges with Unidata User Support are recorded in the
> Unidata inquiry tracking system and then made publicly available
> through the web.  If you do not want to have your interactions made
> available in this way, you must let us know in each email you send to us.


NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.