#!/usr/bin/perl # # The LearningOnline Network with CAPA # # Startup script for the LON-CAPA network processes # # YEAR=2000 # YEAR=2001 # YEAR=2002 # 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 # 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 $command=$ARGV[0]; $command=~s/[^a-z]//g; $ENV{'PATH'}="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin"; $ENV{'BASH_ENV'}=""; { # Firewall variable scoping # 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; 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"; } } sub firewall_is_port_open { # returns 1 if the firewall port is open, 0 if not. # # check if firewall is active or installed return if (! &firewall_is_active); if (`$iptables -L -n 2>/dev/null | grep "tcp dpt:$port"`) { return 1; } else { return 0; } } sub firewall_is_active { if (-e '/proc/net/ip_tables_names') { return 1; } else { return 0; } } 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"; } } } # End firewall variable scope sub stop_daemon { my ($daemon,$killallname)=@_; my $pidfile="/home/httpd/perl/logs/$daemon.pid"; printf("%-10s ",$daemon); if (-e $pidfile) { open(PIDFILE,$pidfile); my $daemonpid=; chomp($daemonpid); kill TERM => $daemonpid; sleep 2; if (kill 0 => $daemonpid) { kill KILL => $daemonpid; sleep 2; if (kill 0 => $daemonpid) { print("failed to kill"); } else { print("killed"); } } else { print("stopped"); } } else { print("not running"); } system("killall -q -0 $killallname"); if ($? == 0) { system("killall -q $killallname"); print(", killed off extraneous processes"); } 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); } 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")) { print 'Restarting LON-CAPA'."\n"; print 'Ending LON-CAPA client and daemon processes'."\n"; foreach my $daemon ('lonsql','lond','lonc','lonhttpd') { my $killallname=$daemon; if ($daemon eq 'lonc') { $killallname='loncnew'; } &stop_daemon($daemon,$killallname); } 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','lonhttpd') { 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'"); } 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 "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"; system("su www -c '/home/httpd/perl/loncron --justcheckconnections'"); } if (! &firewall_is_active) { print 'The iptables firewall is not active'."\n"; } if (&firewall_is_port_open()) { print 'The LON-CAPA port is open in firewall.'."\n"; } elsif (&firewall_is_active) { print 'The LON-CAPA port is NOT open in running firewall!'."\n"; } } else { print 'You need to specify one of restart|stop|start|status on the command line.'."\n"; }