[Date Prev][Date Next][Thread Prev][Thread Next][Minivend by date
][Minivend by thread
]
Re: MV3.x How to find out mv IS working?
****** message to minivend-users from hutch@cix.compulink.co.uk (Robert Hutchinson) ******
In-Reply-To: <372EE648.3A6A5EA7@b-p-a.com>
In article <372EE648.3A6A5EA7@b-p-a.com>, maillist@b-p-a.com
(Marius Schaefer) wrote:
> ****** message to minivend-users from Marius Schaefer
> <maillist@b-p-a.com ******
>
> Hi,
>
> I have the a problem with one of my minivends. More than one
time a day
> the MV is not working anymore (no response). If I take a
look with "ps
> x" I can see a pid with minivend. But it is not working. So
how can I
> found out (with a perl-script eg. instead of my browser) if
mv is woking
> or not?
>
> thanx.
> Marius
>
here is a perl script that I wrote.
It works for me both as a cron job on my linux box checking my
local version as well as checking my online mv on the remote
server where I don't have cron privs. I haven't run it through
a modem to be honest.
Edit the variables at the top to suit your needs.
it requires Expect.pm which I think you will find at
ftp://ftp.habit.com/pub/perl
######################################
#!/usr/bin/perl
use LWP::Simple;
use Expect;
# checks if webserver is up and if it is
# gets the page to see if database server is up
# If there are any problems emails $mail_recip
# user vars
$debug = 0;
$host = "myhost.com";
$user = "$ENV{'USER'}"."\@"."myhost.com";
$mail_recip = "me\@mymail.com";
$mailprog = "/usr/bin/sendmail";
$prot = "http://";
$path_to_prog = "/cgibin/";
$prog = "simple.cgi";
$site = $prot.$host.$path_to_prog.$prog;
$login = "mylogin";
$login_prompt = "ogin: ";
$passw = "mypassword";
$passw_prompt = "word:";
$prompt = "myprompt ";
$process = "telnet";
$delay = "0.5"; # used if $modem=1
$timeout = "60";
$modem = 0; # 1 if modem
is used, will go slow
$command1 = "/my/path/to/minivend/bin/restart\r\n";
# no need to edit below here
$match_number=$error_if_any=$match_string=$before_match=$after
_match="";
######################
# start program
print "\nDEBUG.. HOST=$host\nSITE=$site\nUSER=$user\n"
if($debug);
print "\nDEBUG.. Check if $site is up...\n" if($debug);
# check if server is up
if (head($site)) {
# ok document exists
print "\nDEBUG.. Webserver on $site is UP\n" if($debug);
# get it
$got = get $site;
if (!$got){
&error_log("No Content from $site\n");
}
print "\nDEBUG.. GOT $site\nLENGTH=".length($got)."\n"
if($debug);
# look for phrase <TITLE>No response</TITLE>
$lookfor="<TITLE>No response<\/TITLE>";
if ($got =~ /$lookfor/io){
# database server is down, so
# restart minivend
use Expect;
# Debugging anyone?
$Expect::Log_Stdout = $debug;
if ($debug){
$Expect::Exp_Internal = 1;
$Expect::Debug = 2;
print "\nDEBUG.. No response from database server,
restarting\n";
}
# telnet to host
print "\nDEBUG.. telnet to $host\n" if($debug);
$remote = Expect->spawn("$process $host");
# login
$remote->expect($timeout,$login_prompt)
|| &error_log("Never got login prompt $login_prompt on
$host\n");
if ($modem){
$remote->send_slow($delay,"$login\r");
}
else{
print $remote "$login\r";
}
if($debug){
print "\nDEBUG.. Sent $login\n";
$out .= $remote->clear_accum();
}
else{ $remote->clear_accum();
}
# password
$remote->expect($timeout,$passw_prompt)
|| &error_log("Never got password prompt $passw_prompt on
$host\n");
if ($modem){
$remote->send_slow($delay,"$passw\r");
}
else{
print $remote "$passw\r";
}
if($debug){
print "\nDEBUG.. Sent $passw\n";
$out .= $remote->clear_accum();
}
else{ $remote->clear_accum();
}
# find prompt
$remote->expect($timeout,$prompt)
|| &error_log("Never got prompt $prompt on $host\n");
# right, we are in
if($debug){
print "\nDEBUG.. Logged on\n";
$out .= $remote->clear_accum();
}
else{ $remote->clear_accum();
}
if ($modem){
$remote->send_slow($delay,"$command1");
}
else{
print $remote "$command1";
}
print "\nDEBUG.. Sent $command1\n" if($debug);
($match_number,
$error_if_any,
$match_string,
$before_match,
$after_match) =
$remote->expect($timeout,$prompt);
if ($error_if_any){
&error_log("Never got prompt after sending $command1
command\n");
}
# exit telnet session
if($debug){
print "\nDEBUG.. Exiting telnet\n";
$out .= $remote->clear_accum();
}
else{$remote->clear_accum();
}
if ($modem){
$remote->send_slow($delay,"exit\r\n");
}
else{
print $remote "exit\r\n";
}
# end session
$remote->hard_close();
print "\nDEBUG.. Session closed\n" if($debug);
# parse output of restart to find out what happened
# $before_match should contain the screen output
# log result
&error_log("\nMinivend server
restarted\nOUTPUT:\n$before_match\nEND OUTPUT\n");
}
else{
print "Minivend server is UP on $site\n" if($debug);
}
}
else{
# no response at all from server. log it.
&error_log("No header received from $site.\nWebserver may be
down");
}
print "\nEXITING PROGRAM\n" if ($debug);
exit;
##END OF MAIN##
#----------------------------------------------------------
sub send_mail {
# my $content = @_;
# Open The Mail Program
open(MAIL,"|$mailprog -t");
print MAIL "To: $mail_recip\n";
print MAIL "From: $user (Watching $site)\n";
print MAIL "Subject: Result $0\n";
print MAIL "@_\n";
print MAIL "-" x 75 . "\n\n";
close (MAIL);
}
#----------------------------------------------------------
sub error_log{
if ($debug){
print "@_";
print "\nDONE\n";
}
else{
&send_mail("@_");
}
exit;
}
#----------------------------------------------------------
##########################
##EOF##
good luck
bye :-)=
R.R.Hutchinson
Western Hills Software
12 Great Oak Street
Llanidloes
Powys SY18 6BU
Wales UK
01686 411181
hutch@cix.co.uk
web space provider
Linux specialist
cgi scripts
web databases
> -
> To unsubscribe from the list, DO NOT REPLY to this message.
Instead,
> send
> email with 'UNSUBSCRIBE minivend-users' in the body to
> Majordomo@minivend.com.
> Archive of past messages:
http://www.minivend.com/minivend/minivend-list
>
>
-
To unsubscribe from the list, DO NOT REPLY to this message. Instead, send
email with 'UNSUBSCRIBE minivend-users' in the body to Majordomo@minivend.com.
Archive of past messages: http://www.minivend.com/minivend/minivend-list