Xymon Mailing List Archive search

Strange issue when using local scripts (in linux)

list Jeremy Laidman
Tue, 4 Aug 2020 13:21:30 +1000
Message-Id: <CACO=user-123e6725e5de@xymon.invalid>

Hmm, interesting.

I wonder if the sub-shell that is spawned by the backticks is overriding
the environment somehow. Perhaps do it this way:

   INSTALLED=`LANG=en_US.UTF-8 rpm -q ${RPM} --qf
"%{INSTALLTIME:date}\n"|awk {'print $2" "$3" "$4'}`

This sets the environment only for the "rpm" command.

Alternatively, just assume the date format will be as if LANG=C, by some
as-yet unknown magic, and change the positional parameters printed by awk
to include $3 $2 $5. This would not be my preferred solution, but it'll
probably work, and will get you results while you investigate why the other
solution doesn't work.

I noticed that xymonclient.sh sets LANG=C. You now override LANG in your
script, so this shouldn't cause the behaviour you're seeing. However,
xymonclient.sh also sets both LC_MESSAGES and LC_ALL to C, so they might be
a problem.

Cheers
Jeremy


On Tue, 4 Aug 2020 at 12:26, David Boyer <user-a6c09f28d9d2@xymon.invalid> wrote:
Jeremy,
           You read my mind!  But, it didn't seem to help... :(

[davieb at xymonsvr ~]$ ~xymon/client/local/dateinfo
dhcp-common,4.3.6,18 Jul 2020,en_US.UTF-8

[davieb at xymonsvr ~]$ ~xymon/server/bin/xymon localhost "clientlog
xymonsvr section=local:dateinfo"
[local:dateinfo]
dhcp-common,4.3.6,Jul 18 17:44:26,en_US.UTF-8

[davieb at xymonsvr ~]$ cat ~xymon/client/local/dateinfo
#!/bin/sh

OS=`uname -s`
RPM=dhcp-common
LANG=en_US.UTF-8;export LANG

if [ ${OS} = "Linux" ]; then
   VERSION=`rpm -q ${RPM} --qf "%{VERSION}\n"`
   INSTALLED=`rpm -q ${RPM} --qf "%{INSTALLTIME:date}\n"|awk {'print $2"
"$3" "$4'}`
fi

echo "${RPM},${VERSION},${INSTALLED},${LANG}"

Good thing I'm grey already... This is the kinda stuff that would turn me
grey!

Dave


On Mon, Aug 3, 2020 at 9:21 PM Jeremy Laidman <user-0608abae5e7c@xymon.invalid> wrote:
Great to see that the problem has been identified.

I would recommend forcing LANG in your script to a known value, because
that's the code that makes an assumption about the output of rpm.

J

On Tue, 4 Aug 2020 at 10:56, David Boyer <user-a6c09f28d9d2@xymon.invalid> wrote:
Jeremy,
       If you notice, both iterations are being run from the xymonsvr.
I've added the LANG to see if the
two report it differently.

So, by hand it looks:

[davieb at xymonsvr ~]$ ~xymon/client/local/dateinfo
dhcp-common,4.3.6,18 Jul 2020,en_US.UTF-8

Pulling the info out of xymon looks:

[davieb at xymonsvr ~]$ ~xymon/server/bin/xymon localhost "clientlog
xymonsvr section=local:dateinfo"
[local:dateinfo]
dhcp-common,4.3.6,Jul 18 17:44:26,*C*

Humm, there does appear to be a difference!  Checking the xymon user
itself, it UTF-8.
[xymon at xymonsvr ~]$ echo $LANG
en_US.UTF-8


That appears to be the issue though, I set the LANG=C and ran the script
by hand and get the same results when I pull it from xymon!
[davieb at xymonsvr ~]$ LANG=C;export LANG
[davieb at xymonsvr ~]$ ~xymon/client/local/dateinfo
dhcp-common,4.3.6,Jul 18 17:44:26,C

Looking at the xymon.sh start script, it does not appear to set it
anywhere!  Guess I'll need to run that
to ground in the morning.

Thanks for pointing me in the right direction!

Dave

On Mon, Aug 3, 2020 at 8:11 PM Jeremy Laidman <user-0608abae5e7c@xymon.invalid>
wrote:
David

Update your script to, display the value of the LANG variable in
addition to the RPM details (perhaps on a separate line), and see if the
value differs between the script output (run from your shell) and the
clientlog.

I suspect LANG is set in your shell differently from how it's set in
the xymon user's shell. RPM (or probably glibc) uses LANG to format the
date according to the environment's locale. I'm guessing your shell has
LANG set to something like en_US, whereas the xymon user's LANG is set to
something like C, or is not set at all.

Cheers
Jeremy

On Tue, 4 Aug 2020 at 08:32, David Boyer <user-a6c09f28d9d2@xymon.invalid> wrote:
Hi,
    I've got a strange date issue.  I've written some local scripts to
pad information onto the combo message. Here is the background:

1. When you run the script by hand locally (take note of the date):

[davieb at xymonsvr ~]$ ~xymon/client/local/dateinfo
dhcp-common,4.3.6,18 Jul 2020

2. When I pull the information from xymon server:

[davieb at xymonsvr ~]$ ~xymon/server/bin/xymon localhost "clientlog
xymonsvr section=local:dateinfo"
[local:dateinfo]
dhcp-common,4.3.6,Jul 18 17:44:26


Notice how the date field gets modified?  I can't figure out why. The
only thing I can think of is something within the xymon code, but I don't
know why it would?

Here's the simple script:

[davieb at xymonsvr ~]$ cat ~xymon/client/local/dateinfo
#!/bin/sh

OS=`uname -s`
RPM=dhcp-common

if [ ${OS} = "Linux" ]; then
   VERSION=`rpm -q ${RPM} --qf "%{VERSION}\n"`
   INSTALLED=`rpm -q ${RPM} --qf "%{INSTALLTIME:date}\n"|awk {'print
$2" "$3" "$4'}`
fi

echo "${RPM},${VERSION},${INSTALLED}"

Does anybody have any idea what is going on?

Thanks,
Dave