#!/bin/sh
eval 'if [ -x /usr/local/cpanel/3rdparty/bin/perl ]; then exec /usr/local/cpanel/3rdparty/bin/perl -x -- $0 ${1+"$@"}; else exec /usr/bin/perl -x $0 ${1+"$@"}; fi;'
  if 0;

#!/usr/bin/perl

# cpanel - stoptomcat                             Copyright(c) 2013 cPanel, Inc.
#                                                           All rights Reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

my $force = defined $ARGV[0] && $ARGV[0] eq '--force';

$ENV{CATALINA_BASE}   = '/usr/local/jakarta/tomcat';
$ENV{CATALINA_HOME}   = '/usr/local/jakarta/tomcat';
$ENV{CATALINA_TMPDIR} = '/var/tmp';
$ENV{JAVA_HOME}       = '/usr/local/jdk';
$ENV{PATH}            = "$ENV{JAVA_HOME}/bin:$ENV{PATH}:/usr/local/bin:/usr/X11R6/bin";
$ENV{XML}             = "$ENV{JAVA_HOME}/lib";
$ENV{SSL}             = "$ENV{JAVA_HOME}/lib";
$ENV{JAVAMYSQL}       = "$ENV{JAVA_HOME}/lib";
$ENV{CLASSPATH}       = ".:$ENV{JAVA_HOME}/lib/classes.zip";
$ENV{JAKARTA_HOME}    = '/usr/local/jakarta/tomcat';
$ENV{TOMCAT_HOME}     = $ENV{JAKARTA_HOME};
$ENV{CATALINA_HOME}   = '/usr/local/jakarta';

if ( !$force && -e '/usr/local/jakarta/tomcat/bin/jsvc' ) {
    system( '/usr/local/jakarta/tomcat/bin/jsvc', '-stop', '-verbose', 'org.apache.catalina.startup.Bootstrap' );
    exit;
}

if ( -d "$ENV{JAKARTA_HOME}/lib" ) {
    if ( opendir( my $jk_dir, "$ENV{JAKARTA_HOME}/lib" ) ) {
        while ( my $file = readdir($jk_dir) ) {
            next if ( $file =~ /^\./ );
            $ENV{CLASSPATH} .= ":$ENV{JAKARTA_HOME}/lib/${file}";
        }
        closedir $jk_dir;
    }
    else {
        print "Could not opendir $ENV{JAKARTA_HOME}/lib: $!\n";
    }
}

if ( open my $jsvc_pid_fh, '<', '/var/run/jsvc.pid' ) {
    my $pid = <$jsvc_pid_fh>;
    close $jsvc_pid_fh;
    chomp($pid);

    if ( $pid =~ m{ \A \d+ \z }xms ) {
        kill( 9, $pid ) if $pid > 1;
    }
    else {
        print "PID in PID file is not numeric\n";
    }
}
else {
    print "Could not open '/var/run/jsvc.pid': $!\n";
}

my @PIDS;

if ( eval { require Unix::PID; } ) {
    my $pid = Unix::PID->new();
    @PIDS = $pid->get_pidof('jsvc');
}
else {

    # deprecated old way
    my @PSLINES = split( /\n/, `ps -efw | grep jsvc` );
    foreach my $psline (@PSLINES) {
        ( undef, $pid, undef ) = split( /[\t\s]+/, $psline );
        next if ( $pid <= 1 );
        push( @PIDS, $pid );
    }
}

kill( 9, @PIDS ) if @PIDS;
