--- loncom/init.d/loncontrol 2004/12/02 20:49:50 1.21 +++ loncom/init.d/loncontrol 2008/11/04 21:06:31 1.33 @@ -1,5 +1,7 @@ #!/usr/bin/perl # +# $Id: loncontrol,v 1.33 2008/11/04 21:06:31 www Exp $ +# # The LearningOnline Network with CAPA # # Copyright Michigan State University Board of Trustees @@ -30,11 +32,21 @@ # chkconfig: 345 95 5 # description: LON-CAPA is a "network of knowledge". It is used to \ # distribute knowledge resources and instructional management. -# processnames: lonc, lond, lonsql +# processnames: lonc, lond, lonsql, lonmaxima # pidfiles: /home/httpd/perl/logs/lon*.pid # config: /etc/httpd/conf/loncapa.conf # config: /home/httpd/lonTabs/hosts.tab # config: /home/httpd/lonTabs/spare.tab +# SuSE chkconfig/insserv info +### BEGIN INIT INFO +# Provides: loncapa +# Required-Start: mysql apache2 $network $remote_fs +# Required-Stop: +# Default-Start: 3 4 5 +# Default-Stop: +# Description: Starts the LON-CAPA services +### END INIT INFO + $command=$ARGV[0]; $command=~s/[^a-z]//g; @@ -45,29 +57,39 @@ $ENV{'BASH_ENV'}=""; # Firewall code is based on the code in FC2 /etc/init.d/ntpd my $fw_chain = 'RH-Firewall-1-INPUT'; my $iptables = '/sbin/iptables'; - my $port = 5663; + if (! -e $iptables) { + $iptables = '/usr/sbin/iptables'; + if (! -e $iptables) { + print("Unable to find iptables command\n"); + } + } + my $lond_port = 5663; sub firewall_open_port { return if (! &firewall_is_active); - print "Opening firewall access on port $port\n"; if (! `$iptables -L -n 2>/dev/null | grep $fw_chain | wc -l`) { return; } # iptables is running with our chain # # We could restrict the servers allowed to attempt to communicate # here, but the logistics of updating the /home/httpd/lonTabs/host.tab # file are likely to be a problem - my $firewall_command = - "$iptables -I $fw_chain -p tcp -d 0/0 --dport $port -j ACCEPT"; - system($firewall_command); - my $return_status = $?>>8; - if ($return_status == 1) { - # Error - print "Error opening port.\n"; - } elsif ($return_status == 2) { - # Bad command - print "Bad command error opening port. Command was\n". - " ".$firewall_command."\n"; + foreach my $port ($lond_port) { + print "Opening firewall access on port $port.\n"; + + my $firewall_command = + "$iptables -I $fw_chain -p tcp -d 0/0 --dport $port -j ACCEPT"; + system($firewall_command); + my $return_status = $?>>8; + if ($return_status == 1) { + # Error + print "Error opening port.\n"; + } elsif ($return_status == 2) { + # Bad command + print "Bad command error opening port. Command was\n". + " ".$firewall_command."\n"; + } } + } sub firewall_is_port_open { @@ -92,18 +114,20 @@ sub firewall_is_active { sub firewall_close_port { return if (! &firewall_is_active); - print "Closing firewall access on port $port\n"; - my $firewall_command = - "$iptables -D $fw_chain -p tcp -d 0/0 --dport $port -j ACCEPT"; - system($firewall_command); - my $return_status = $?>>8; - if ($return_status == 1) { - # Error - print "Error closing port.\n"; - } elsif ($return_status == 2) { - # Bad command - print "Bad command error closing port. Command was\n". - " ".$firewall_command."\n"; + foreach my $port ($lond_port) { + print "Closing firewall access on port $port.\n"; + my $firewall_command = + "$iptables -D $fw_chain -p tcp -d 0/0 --dport $port -j ACCEPT"; + system($firewall_command); + my $return_status = $?>>8; + if ($return_status == 1) { + # Error + print "Error closing port.\n"; + } elsif ($return_status == 2) { + # Bad command + print "Bad command error closing port. Command was\n". + " ".$firewall_command."\n"; + } } } @@ -113,16 +137,19 @@ sub stop_daemon { my ($daemon,$killallname)=@_; my $pidfile="/home/httpd/perl/logs/$daemon.pid"; - printf("%-10s ",$daemon); + printf("%-15s ",$daemon); if (-e $pidfile) { open(PIDFILE,$pidfile); my $daemonpid=; chomp($daemonpid); kill TERM => $daemonpid; - sleep 2; + my $count=0; + while ($count++ < 5 && kill(0 => $daemonpid)) { + sleep 1; + } if (kill 0 => $daemonpid) { kill KILL => $daemonpid; - sleep 2; + sleep 1; if (kill 0 => $daemonpid) { print("failed to kill"); } else { @@ -139,23 +166,23 @@ sub stop_daemon { system("killall -q $killallname"); print(", killed off extraneous processes"); } + unlink($pidfile); print("\n"); } - -if (($command eq "restartold") or ($command eq "reloadold")) { - print 'Restarting LON-CAPA'."\n"; - print 'Ending LON-CAPA client and daemon processes'."\n"; - foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { - &stop_daemon($daemon,$daemon); +sub clean_sockets { + opendir(SOCKETS,"/home/httpd/sockets/"); + while (my $fname=readdir(SOCKETS)) { + next if (-d $fname + || $fname=~/(mysqlsock|maximasock|\Q$perlvar{'lonSockDir'}\E)/); + unlink("/home/httpd/sockets/$fname"); } - print 'Starting LON-CAPA client and daemon processes (please be patient)'. - "\n"; - system("su www -c '/home/httpd/perl/loncron --oldlonc --justcheckdaemons'"); -} elsif (($command eq "restart") or ($command eq "reload")) { +} + +if ($command eq "restart") { print 'Restarting LON-CAPA'."\n"; print 'Ending LON-CAPA client and daemon processes'."\n"; - foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { + foreach my $daemon ('lonsql','lond','lonc','lonmemcached','lonmaxima') { my $killallname=$daemon; if ($daemon eq 'lonc') { $killallname='loncnew'; } &stop_daemon($daemon,$killallname); @@ -165,24 +192,22 @@ if (($command eq "restartold") or ($comm system("su www -c '/home/httpd/perl/loncron --justcheckdaemons'"); } elsif ($command eq "stop") { print 'Stopping LON-CAPA'."\n"; - foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { + foreach my $daemon ('lonsql','lond','lonc','lonmemcached','lonmaxima') { my $killallname=$daemon; if ($daemon eq 'lonc') { $killallname='loncnew'; } &stop_daemon($daemon,$killallname); } &firewall_close_port(); -} elsif ($command eq "startold") { - &firewall_open_port(); - 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 --oldlonc --justcheckdaemons'"); + &clean_sockets(); } elsif ($command eq "start") { &firewall_open_port(); 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'"); +} elsif ($command eq "reload") { + print 'Reload LON-CAPA config files'."\n"; + system("su www -c '/home/httpd/perl/loncron --justreload'"); } elsif ($command eq "status") { $response=`/bin/cat /home/httpd/perl/logs/*.pid 2>&1`; if ($response=~/No such file or directory/) { 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.