#!/opt/casp/tools/bin/linux2/perl5/bin/perl -I/opt/casp/tools/bin/linux2/perl5/lib -I/opt/casp use INSTALL::common; use INSTALL::global; use INSTALL::parameter; use INSTALL::os; use INSTALL::webserver; use INSTALL::process_info; use strict; my $pParameters = \%INSTALL::parameter::variables; #============================================================================== #------------------------ Default global values #============================================================================== $pParameters->{asphome} = "/opt/casp"; $pParameters->{com_layer} = "chilicom"; INSTALL::common::set_standard_globals; my $pGlobals = \%INSTALL::global::variables; sub usage { report("Usage: $0 engine= [start|stop|restart|status]"); report("Example: $0 engine=/opt/casp/asp-apache-3000 status"); exit(1); } #============================================================================== #------------------------ Validate all the required parameters. #============================================================================== my %PARAM_REQUIREMENTS = ( REQUIRED => [ 'engine(_dir|_name)?', 'start|stop|restart|status'], ); $pParameters->{non_interactive} = 'true'; # This tool will _NOT_ run interactively. if ((not @ARGV) || boolean_value($pParameters->{'--help'})) { usage(); } unless(INSTALL::parameter::verify(%PARAM_REQUIREMENTS)) { usage(); exit (1); } my @engine_dirs; unless(interactive) { use INSTALL::caspeng; my @matches = grep { /engine(_dir|_name)?(_[0-9])?/ } keys %{$pParameters}; my @Engine_Params; foreach my $match (@matches) { my ($path); if ($match =~ /_name/) { $path = "$pParameters->{asphome}/$pParameters->{$match}"; } else { $path = $pParameters->{$match}; } my $realpath = realpath($path); unless(defined $realpath) { error("engine=$path refers to an invalid path."); exit(1); } else { push @Engine_Params, $realpath; } } my %Engine_Exists = map { $_ => undef } INSTALL::caspeng::list_engines; foreach my $engine (@Engine_Params) { unless(exists $Engine_Exists{$engine}) { error("Unknown engine specified: ", " $engine"); exit(1); } else { push @engine_dirs, @Engine_Params; } } } else { die "Will not run interactively."; } my @directives = grep { /^(?:start|stop|restart|status)$/ } @ARGV; #============================================================================== #------------------------ Actually control the associated webserver. #============================================================================== my %server_map = map { $_->{engine_dir} => $_ } INSTALL::webserver::load_used_servers; my $result = 1 << 8; foreach my $directive (@directives) { foreach(@engine_dirs) { my $pServerStats = $server_map{$_}; (($directive eq "stop") || ($directive eq "restart")) && do { $result = system($pServerStats->{webserver_stop_script}); if ($directive ne "restart") { last; } }; (($directive eq "start") || ($directive eq "restart")) && do { $result = system($pServerStats->{webserver_start_script}); last; }; ($directive eq "status") && do { if (not exists $pServerStats->{webserver_status_script}) { my $webserver_script = "$pGlobals->{asphome}/INSTALL/@{[lc($pServerStats->{webserver_type})]}ctl"; if (-x $webserver_script) { $result = system("$webserver_script binary=$pServerStats->{webserver_binary} conf=$pServerStats->{webserver_conf} status"); } else { die "Unhandled webserver type."; } } else { $result = system($pServerStats->{webserver_status_script}); } last; }; die "Invalid argument passed: $directive"; } } exit($result >> 8);