--- loncom/lonsql 2001/04/17 15:47:19 1.35 +++ loncom/lonsql 2001/11/29 14:59:52 1.40 @@ -1,8 +1,34 @@ #!/usr/bin/perl + +# The LearningOnline Network +# lonsql - LON TCP-MySQL-Server Daemon for handling database requests. +# +# YEAR=2000 # lonsql-based on the preforker:harsha jagasia:date:5/10/00 # 7/25 Gerd Kortemeyer # many different dates Scott Harrison +# YEAR=2001 +# many different dates Scott Harrison # 03/22/2001 Scott Harrison +# 8/30 Gerd Kortemeyer +# 10/17,11/28,11/29 Scott Harrison +# +# $Id: lonsql,v 1.40 2001/11/29 14:59:52 harris41 Exp $ +### + +############################################################################### +## ## +## ORGANIZATION OF THIS PERL SCRIPT ## +## 1. Modules used ## +## 2. Enable find subroutine ## +## 3. Read httpd access.conf and get variables ## +## 4. Make sure that database can be accessed ## +## 5. Make sure this process is running from user=www ## +## 6. Check if other instance is running ## +## 7. POD (plain old documentation, CPAN style) ## +## ## +############################################################################### + use IO::Socket; use Symbol; use POSIX; @@ -45,7 +71,11 @@ close(CONFIG); $dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar{'lonSqlAccess'},{ RaiseError =>0,PrintError=>0}) ) { print "Cannot connect to database!\n"; - exit; + $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; + $subj="LON: $perlvar{'lonHostID'} Cannot connect to database!"; + system("echo 'Cannot connect to MySQL database!' |\ + mailto $emailto -s '$subj' > /dev/null"); + exit 1; } else { $dbh->disconnect; @@ -79,6 +109,8 @@ while ($configline=) { } close(CONFIG); +$PREFORK=int($PREFORK/4); + $unixsock = "mysqlsock"; my $localfile="$perlvar{'lonSockDir'}/$unixsock"; my $server; @@ -295,7 +327,7 @@ sub make_new_child { 'creationdate','keywords','language', 'lastrevisiondate','mime','notes', 'owner','subject','title') { - $stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//; + $stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//s; } my $m2=$m; my $docroot=$perlvar{'lonDocRoot'}; $m2=~s/^$docroot//; @@ -416,3 +448,75 @@ sub propath { my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; return $proname; } + +# ----------------------------------- POD (plain old documentation, CPAN style) + +=head1 NAME + +lonsql - LON TCP-MySQL-Server Daemon for handling database requests. + +=head1 SYNOPSIS + +This script should be run as user=www. The following is an example invocation +from the loncron script. Note that a lonsql.pid file contains the pid of +the parent process. + + if (-e $lonsqlfile) { + my $lfh=IO::File->new("$lonsqlfile"); + my $lonsqlpid=<$lfh>; + chomp($lonsqlpid); + if (kill 0 => $lonsqlpid) { + print $fh "

lonsql at pid $lonsqlpid responding

"; + $restartflag=0; + } else { + $errors++; $errors++; + print $fh "

lonsql at pid $lonsqlpid not responding

"; + $restartflag=1; + print $fh + "

Decided to clean up stale .pid file and restart lonsql

"; + } + } + if ($restartflag==1) { + $errors++; + print $fh '
Killall lonsql: '. + system('killall lonsql').' - '; + sleep 60; + print $fh unlink($lonsqlfile).' - '. + system('killall -9 lonsql'). + '
'; + print $fh "

lonsql not running, trying to start

"; + system( + "$perlvar{'lonDaemons'}/lonsql 2>>$perlvar{'lonDaemons'}/logs/lonsql_errors"); + sleep 10; + +=head1 DESCRIPTION + +LON TCP-MySQL-Server Daemon for handling database requests. + +=head1 README + +LON TCP-MySQL-Server Daemon for handling database requests. + +=head1 PREREQUISITES + +IO::Socket +Symbol +POSIX +IO::Select +IO::File +Socket +Fcntl +Tie::RefHash +DBI + +=head1 COREQUISITES + +=head1 OSNAMES + +linux + +=head1 SCRIPT CATEGORIES + +Server/Process + +=cut