version 1.17, 2004/04/01 22:14:42
|
version 1.45, 2018/08/07 17:12:17
|
Line 1
|
Line 1
|
#!/usr/bin/perl |
#!/usr/bin/perl |
# |
# |
|
# $Id$ |
|
# |
# The LearningOnline Network with CAPA |
# The LearningOnline Network with CAPA |
# |
# |
|
# Copyright Michigan State University Board of Trustees |
|
# |
|
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
# |
|
# LON-CAPA is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# LON-CAPA is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with LON-CAPA; if not, write to the Free Software |
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
# |
|
# /home/httpd/html/adm/gpl.txt |
|
# |
|
# http://www.lon-capa.org/ |
|
# |
# Startup script for the LON-CAPA network processes |
# Startup script for the LON-CAPA network processes |
# |
# |
# YEAR=2000 |
|
# YEAR=2001 |
|
# YEAR=2002 |
|
|
|
# chkconfig: 345 95 5 |
# chkconfig: 345 95 5 |
# description: LON-CAPA is a "network of knowledge". It is used to |
# description: LON-CAPA is a "network of knowledge". It is used to \ |
# distribute knowledge resources and instructional management. |
# distribute knowledge resources and instructional management. |
# processnames: lonc, lond, lonsql |
# processnames: lonc, lond, lonsql, lonmaxima, lonr |
# pidfiles: /home/httpd/perl/logs/lon*.pid |
# pidfiles: /home/httpd/perl/logs/lon*.pid |
# config: /etc/httpd/conf/loncapa.conf |
# config: /etc/httpd/conf/loncapa.conf |
# config: /home/httpd/lonTabs/hosts.tab |
# config: /home/httpd/lonTabs/hosts.tab |
# config: /home/httpd/lonTabs/spare.tab |
# config: /home/httpd/lonTabs/spare.tab |
|
# SuSE chkconfig/insserv info |
|
### BEGIN INIT INFO |
|
# Provides: loncapa |
|
# Required-Start: SuSEfirewall2_setup mysql apache2 $network $remote_fs |
|
# Should-Start: $ALL |
|
# Required-Stop: |
|
# Default-Start: 3 5 |
|
# Default-Stop: |
|
# Description: Starts the LON-CAPA services |
|
### END INIT INFO |
|
|
$command=$ARGV[0]; $command=~s/[^a-z]//g; |
use strict; |
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA::Configuration; |
|
use LONCAPA::Firewall; |
|
use Apache::lonnet; |
|
|
|
my $command=$ARGV[0]; $command=~s/[^a-z]//g; |
|
|
$ENV{'PATH'}="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin"; |
$ENV{'PATH'}="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin"; |
$ENV{'BASH_ENV'}=""; |
$ENV{'BASH_ENV'}=""; |
|
|
sub stop_daemon { |
sub stop_daemon { |
my ($daemon)=@_; |
my ($daemon,$killallname)=@_; |
my $pidfile="/home/httpd/perl/logs/$daemon.pid"; |
my $pidfile="/home/httpd/perl/logs/$daemon.pid"; |
|
|
printf("%-10s ",$daemon); |
printf("%-15s ",$daemon); |
if (-e $pidfile) { |
if (-e $pidfile) { |
open(PIDFILE,$pidfile); |
open(PIDFILE,$pidfile); |
my $daemonpid=<PIDFILE>; |
my $daemonpid=<PIDFILE>; |
chomp($daemonpid); |
chomp($daemonpid); |
kill TERM => $daemonpid; |
kill TERM => $daemonpid; |
sleep 2; |
my $count=0; |
|
while ($count++ < 5 && kill(0 => $daemonpid)) { |
|
sleep 1; |
|
} |
if (kill 0 => $daemonpid) { |
if (kill 0 => $daemonpid) { |
kill KILL => $daemonpid; |
kill KILL => $daemonpid; |
sleep 2; |
sleep 1; |
if (kill 0 => $daemonpid) { |
if (kill 0 => $daemonpid) { |
print("failed to kill\n"); return; |
print("failed to kill"); |
} else { |
} else { |
print("killed\n"); return; |
print("killed"); |
} |
} |
} else { |
} else { |
print("stopped\n"); return; |
print("stopped"); |
} |
} |
|
} else { |
|
print("not running"); |
} |
} |
print("not running\n"); |
system("killall -q -0 $killallname"); |
|
if ($? == 0) { |
|
system("killall -q $killallname"); |
|
print(", killed off extraneous processes"); |
|
} |
|
unlink($pidfile); |
|
if ($killallname eq 'loncnew') { |
|
&clean_nossl_loncpids(); |
|
} |
|
print("\n"); |
} |
} |
|
|
if (($command eq "restartold") or ($command eq "reloadold")) { |
sub clean_sockets { |
print 'Restarting LON-CAPA'."\n"; |
opendir(SOCKETS,"/home/httpd/sockets/"); |
print 'Ending LON-CAPA client and daemon processes'."\n"; |
my $perlvarref=&LONCAPA::Configuration::read_conf(); |
foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { |
return if (ref($perlvarref) ne 'HASH'); |
&stop_daemon($daemon); |
while (my $fname=readdir(SOCKETS)) { |
} |
next if (-d $fname |
print 'Starting LON-CAPA client and daemon processes (please be patient)'. |
|| $fname=~/(mysqlsock|maximasock|\Q$perlvarref->{'lonSockDir'}\E)/); |
"\n"; |
unlink("/home/httpd/sockets/$fname"); |
system("su www -c '/home/httpd/perl/loncron'"); |
|
} elsif (($command eq "restart") or ($command eq "reload")) { |
|
print 'Restarting LON-CAPA'."\n"; |
|
print 'Ending LON-CAPA client and daemon processes'."\n"; |
|
foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { |
|
&stop_daemon($daemon); |
|
} |
|
print 'Starting LON-CAPA client and daemon processes (please be patient)'. |
|
"\n"; |
|
system("su www -c '/home/httpd/perl/loncron new'"); |
|
} elsif ($command eq "stop") { |
|
print 'Stopping LON-CAPA'."\n"; |
|
foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { |
|
&stop_daemon($daemon); |
|
} |
|
} elsif ($command eq "startold") { |
|
print 'Starting LON-CAPA'."\n"; |
|
print 'Starting LON-CAPA client and daemon processes (please be patient)'. |
|
"\n"; |
|
system("su www -c '/home/httpd/perl/loncron'"); |
|
} elsif ($command eq "start") { |
|
print 'Starting LON-CAPA'."\n"; |
|
print 'Starting LON-CAPA client and daemon processes (please be patient)'. |
|
"\n"; |
|
system("su www -c '/home/httpd/perl/loncron new'"); |
|
} elsif ($command eq "status") { |
|
$response=`/bin/cat /home/httpd/perl/logs/*.pid 2>&1`; |
|
if ($response=~/No such file or directory/) { |
|
print 'LON-CAPA is not running.'."\n"; |
|
} |
} |
else { |
} |
print 'LON-CAPA is running.'."\n"; |
|
|
sub clean_nossl_loncpids { |
|
my $childpiddir = '/home/httpd/perl/logs/loncpids'; |
|
my $nossldir = '/home/httpd/sockets/nosslverify'; |
|
foreach my $dir ($childpiddir,$nossldir) { |
|
if (-d $dir) { |
|
if (opendir(my $dh,$dir)) { |
|
while (my $fname=readdir($dh)) { |
|
next if ($fname =~ /^\./); |
|
unlink("$dir/$fname"); |
|
} |
|
closedir($dh); |
|
} |
|
} |
} |
} |
|
} |
|
|
|
if (($command eq "restart") || ($command eq 'stop') || |
|
($command eq 'start') || ($command eq "status")) { |
|
my $iptables = &LONCAPA::Firewall::get_pathto_iptables(); |
|
my @fw_chains = &LONCAPA::Firewall::get_fw_chains($iptables); |
|
my $lond_port = &LONCAPA::Firewall::get_lond_port(); |
|
my %iphost; |
|
if ($command eq 'restart') { |
|
print 'Restarting LON-CAPA'."\n"; |
|
print 'Ending LON-CAPA client and daemon processes'."\n"; |
|
foreach my $daemon ('lonsql','lond','lonc','lonmemcached','lonmaxima','lonr') { |
|
my $killallname=$daemon; |
|
if ($daemon eq 'lonc') { $killallname='loncnew'; } |
|
&stop_daemon($daemon,$killallname); |
|
} |
|
%iphost = &Apache::lonnet::get_iphost('',1); |
|
my $firewall_result = |
|
&LONCAPA::Firewall::firewall_close_port($iptables,\@fw_chains, |
|
$lond_port,\%iphost,[$lond_port]); |
|
if ($firewall_result) { |
|
print "$firewall_result\n"; |
|
} |
|
$firewall_result = |
|
&LONCAPA::Firewall::firewall_open_port($iptables,\@fw_chains, |
|
$lond_port, \%iphost,[$lond_port]); |
|
if (($firewall_result eq 'ok') || ($firewall_result eq 'inactive firewall')) { |
|
if ($firewall_result eq 'inactive firewall') { |
|
print "WARNING: iptables firewall is currently inactive\n"; |
|
} |
|
} elsif ($firewall_result) { |
|
print "$firewall_result\n"; |
|
} |
|
print 'Starting LON-CAPA client and daemon processes (please be patient)'. |
|
"\n"; |
|
system("su www -c '/home/httpd/perl/loncron --justcheckdaemons'"); |
|
} elsif ($command eq 'stop') { |
|
print 'Stopping LON-CAPA'."\n"; |
|
foreach my $daemon ('lonsql','lond','lonc','lonmemcached','lonmaxima','lonr') { |
|
my $killallname=$daemon; |
|
if ($daemon eq 'lonc') { $killallname='loncnew'; } |
|
&stop_daemon($daemon,$killallname); |
|
} |
|
my $firewall_result = |
|
&LONCAPA::Firewall::firewall_close_port($iptables,\@fw_chains,$lond_port,\%iphost,[$lond_port]); |
|
if ($firewall_result) { |
|
print "$firewall_result\n"; |
|
} |
|
&clean_sockets(); |
|
} elsif ($command eq "start") { |
|
%iphost = &Apache::lonnet::get_iphost('',1); |
|
my $firewall_result = |
|
&LONCAPA::Firewall::firewall_open_port($iptables,\@fw_chains,$lond_port,\%iphost,[$lond_port]); |
|
if (($firewall_result eq 'ok') || ($firewall_result eq 'inactive firewall')) { |
|
if ($firewall_result eq 'inactive firewall') { |
|
print "WARNING: iptables firewall is currently inactive\n"; |
|
} |
|
print 'Starting LON-CAPA'."\n"; |
|
print 'Starting LON-CAPA client and daemon processes (please be patient)'. |
|
"\n"; |
|
system("su www -c '/home/httpd/perl/loncron --justcheckdaemons'"); |
|
} else { |
|
print "Not starting LON-CAPA\n"; |
|
if ($firewall_result eq 'port number unknown') { |
|
print "Could not check for status of LON-CAPA port in running firewall - port number unknown. \n"; |
|
} elsif ($firewall_result) { |
|
print "$firewall_result\n"; |
|
} |
|
} |
|
} elsif ($command eq "status") { |
|
%iphost = &Apache::lonnet::get_iphost(); |
|
my $response=`/bin/cat /home/httpd/perl/logs/*.pid 2>&1`; |
|
if ($response=~/No such file or directory/) { |
|
print 'LON-CAPA is not running.'."\n"; |
|
} else { |
|
print 'LON-CAPA is running.'."\n"; |
|
system("su www -c '/home/httpd/perl/loncron --justcheckconnections'"); |
|
} |
|
if (! &LONCAPA::Firewall::firewall_is_active()) { |
|
print 'The iptables firewall is not active'."\n"; |
|
} |
|
if ($lond_port) { |
|
my $londopen; |
|
foreach my $fw_chain (@fw_chains) { |
|
my $numopen = &LONCAPA::Firewall::firewall_is_port_open($iptables,$fw_chain,$lond_port,$lond_port,\%iphost); |
|
$londopen += $numopen; |
|
} |
|
if ($londopen) { |
|
print "The LON-CAPA port ($lond_port) is open in firewall.\n"; |
|
} elsif (&LONCAPA::Firewall::firewall_is_active) { |
|
print "The LON-CAPA port ($lond_port) is NOT open in running firewall!\n"; |
|
} |
|
} else { |
|
if (&LONCAPA::Firewall::firewall_is_active()) { |
|
print "Could not check for status of LON-CAPA port in running firewall - port number unknown.\n"; |
|
} else { |
|
print "LON-CAPA port number is unknown, and firewall is not running.\n"; |
|
} |
|
} |
|
} |
|
} elsif ($command eq "reload") { |
|
print 'Reload LON-CAPA config files'."\n"; |
|
system("su www -c '/home/httpd/perl/loncron --justreload'"); |
} else { |
} else { |
print 'You need to specify restart|stop|start|status on the command line'. |
print "You need to specify one of reload|restart|stop|start|status on the command line.\n"; |
' argument.'."\n"; |
|
} |
} |