[Xymon] Perl ipc and bsq option

Olivier AUDRY leo at minas.fr
Wed Jul 2 15:06:54 CEST 2014


I'm trying to use the new Posix MQ feature of the lastest Xymon version
with devmon. The first step is talking to xymon with ipc in perl ...

So the fisrt step will be to find the correct msqid. As I understand the
C xymon code I wrote this. What is not working :(

#!/usr/bin/perl -w

use strict;
use IPC::SysV qw(IPC_RMID ftok);

my $XYMONHOME           = $ENV{'XYMONHOME'};

defined ($XYMONHOME) || die "getting env failed: $!";
print "HOME : $XYMONHOME\n";

defined ($MAXMSG_STATUS) || die "getting env failed: $!";
print "MAX : $MAXMSG_STATUS\n";

my $key         = ftok($XYMONHOME, int($MAXMSG_STATUS));
defined ($key) || die "ftok failed: $!";
print "key $key\n";

my $id          = msgget($key, 0);
defined($id)    || die "msgget failed: $!";
print "id $id\n";

$key and $id are not the one that ipcs -q show me ...
[xymon devmon]$ perl     ipc.pl 
HOME : /opt/xymon/server
MAX : 256
key 11597
msgget failed: No such file or directory at ipc.pl line 23.
[xymon devmon]$ ipcs -q

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    
0x000004d2 98306      root       666        0            0           
0x0a002d4d 229379     xymon      666        0            0   

So even I can find the msgid with perl let force it :

my $sent = "status coltmon-cf.ipcs  green test";
msgsnd(229379, $sent, 0) || die "msgsnd failed: $!";

And this is working well. 

So if someone knows how to get the correct way to get
the msgid in perl feel free to share :)


More information about the Xymon mailing list