Hi,

why always go a complicated way?? Did you read userguide?? Just use something like this:

bearerbox --daemonize --parachute
smsbox --daemonize --parachute

This will start bearerbox and smsboxc as daemon and also start parachute process (watcher). If box then crashed parachute process will restart child process automatically.

Thanks,
Alex


fred schrieb:
heres some extracts of perl code that should help with ideas....(extracts
because the full code is
particular to our conf files and environment etc which is off-topic and i'm
not going to go into it here)
I'm sure you should be able to embelish it with code
to suit your environment.......

.......
   my $pid = startProcess($execList->{$key});
   if ($DEBUG) { printf STDOUT "startProcess($key)\n"; }

   syslog(LOG_INFO, "starting process %s", $key);

   $pids{$pid} = $key;

...........

# do an eternal loop wait(2)ing for child processes to exit, and restart
them.
#
for (;;)
{

 my $pid = wait;

 sleep 1;

 if ($DEBUG) { printf STDOUT "Child process has died - PID=$pid
KEY=$pids{$pid}\n" };
 syslog(LOG_INFO, "Child process has died - PID=$pid KEY=$pids{$pid} -
restarting");

 # a pid of < 0 means no children exist.
 #
 if ($pid > 0)
 {

  if (defined $pids{$pid})
 {

   my $key = $pids{$pid};
   undef $pids{$pid};

   if ($DEBUG) { print "Process $pid died $?\n"; }

   # parse the config again (in case something changed - like a version
number or path to binary or such)
   #
   require "$CONFDIR/umq.conf";

   $pid = startProcess($execList->{$key});
   $pids{$pid} = $key;

   if ($DEBUG) { printf STDOUT "Started process %d\n", $pid; }
  }
  else
  {
   # who's child is this again? Not ours...
   #
   if ($DEBUG) { printf STDOUT "nasty %ld\n", $?; }
  }
 }
 else {
  # this is a serious situation - no children exist - it's likely that the
system is thrashing
  # we'll try 20 loops first before giving up totally...
  #
  if ($no_kids_found++ > 1)
  {
   exit(2);
  }
 }
}



# Start a process given the details in the hash reference.
#
sub startProcess
{

 my ($details) = @_;
 my $pid = 0;
 if (($details->{RUN} eq 'true') || ($IGNORERUNVAL))
 {
  if (($pid = fork()) == 0)
 {

   if ($DEBUG) { printf STDOUT "cmd> %s\n", $details->{COMMAND}; }

   # the second exec thing here is for bash - we don't want an unnecessary
shall hanging around
   #
   exec "exec " . $details->{COMMAND};   // this this argument is like
".../bearerbox ../conf/kannel-voda.conf >>
/var/log/kannel/bearerbox-voda.log2>&1"
  }
 }
 else
 {
  printf STDERR "RUN values for $BINDGROUP are not all set to 'true' and -i
option not chosen. Exiting.\n";
  exit(2);
 }
 return $pid;
}



we use this for both the bearerbox and smsbox process.
Any way this should be enough to get you started on your own u beaut program
monitor.
I'm assuming perl knowledge here, so good luck!


----- Original Message ----- From: "Hillel" <[EMAIL PROTECTED]>
To: "Kannel Users" <[email protected]>
Sent: Friday, March 17, 2006 11:37 PM
Subject: Prevent losing SMSs via smsbox


Hi,

Kannel has a flaw in that if the bearerbox is up but the smsbox is down,
SMSs will be lost.
They will not be retried as only the smsbox handles the retries.

Does anyone have a script they can send to the user list that they are
prepared to share, to ensure the smsbox is up.

This does not happen often that it is down and the bearerbox is up, but
when
it does, all the SMSs are lost until you realise it is down.

Thanks








Reply via email to