MOON
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
System: Linux csr818.wilogic.com 2.6.18-419.el5xen #1 SMP Fri Feb 24 22:50:37 UTC 2017 x86_64
User: digitals (531)
PHP: 5.4.45
Disabled: NONE
Upload Files
File: //proc/self/root/scripts.20110531.215904.25158/restartsrv_mysql
#!/usr/bin/perl
# cpanel - restartsrv_mysql                       Copyright(c) 2010 cPanel, Inc.
#                                                           All rights Reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

BEGIN { unshift @INC, '/usr/local/cpanel', '/scripts'; }

use RestartSrv;
use Cpanel::MysqlUtils      ();
use Cpanel::OSSys           ();
use Cpanel::SafeRun::Errors ();
use strict;

eval {
    local $SIG{'__DIE__'};
    require Cpanel::Rlimit;
    Cpanel::Rlimit::set_rlimit_to_infinity();
};

setuppath();

my $lock_file = '/var/run/restartsrv_mysql.lock';
my ( $system, $nodename, $release, $version, $machine ) = Cpanel::OSSys::uname();
my ( $restart, $check, $status ) = parseargv();
my ( $processowner, $service ) = servicefixup( 'mysql', 'mysql' );
my $disabled = -e '/etc/mysqldisable' ? 1 : 0;

my $mysql_sock = `mysql_config --socket`;
chomp($mysql_sock);
my @SOCKETPTS = ( $mysql_sock, '/tmp/mysql.sock', '/var/tmp/mysql.sock', '/var/db/mysql/mysql.sock', '/var/lib/mysql/mysql.sock', '/usr/local/tmp/mysql.sock', '/usr/local/lib/mysql.sock' );

if ( $restart && !$disabled ) {
    lock_file($lock_file);

    my $manualstart = needsmanualstart( $system, $service );
    my $iscript;
    if ( !$manualstart ) {
        $iscript = getinitfile( $service, $system );
    }

    if ($iscript) {
        nooutputsystem( $iscript, 'stop' );
        doomedprocess($service);
        doomedprocess('safe_mysqld');
        doomedprocess('mysqld_safe');
        doomedprocess('mysqld');
        if ( $restart != -1 ) {
            unless ( fork() ) {
                Cpanel::OSSys::setsid();
                Cpanel::CleanupStub::daemonclosefds();
                system "$iscript start &";
                exit;
            }
        }
    }
    else {
        doomedprocess($service);
        doomedprocess('safe_mysqld');
        doomedprocess('mysqld_safe');
        doomedprocess('mysqld');
        if ( $restart != -1 ) {
            unless ( fork() ) {
                Cpanel::OSSys::setsid();
                Cpanel::CleanupStub::daemonclosefds();
                system 'mysqld_safe --user=mysql &';
                exit;
            }
        }
    }

    if ( $restart != -1 ) {

        # Wait for socket creation, then create all symlinks
        my $count = 0;
        while ( $count < 90 && !get_socket() ) {
            sleep 1;
            $count++;
        }
        if ( $count < 90 ) {    # Successfully located socket
            symlink_mysql_socket();

            # In transistion from Horde 3.1 to 3.1.x, Horde files will be missing if during upcp
            # MySQL was not running
            if (   !-e '/usr/local/cpanel/base/horde/config/conf.php.in'
                && !-e '/var/cpanel/dnsonly' ) {
                system '/usr/local/cpanel/bin/update-horde';
            }

        }
        else {
            print "Failed to locate MySQL socket. Please check the mysql configuration.\n";
        }
    }
    unlink $lock_file if -e $lock_file;
}
elsif ($status) {

    #--status (show ps)
    if ($disabled) {
        print "mysql is disabled\n";
    }
    else {
        print check_service( 'service' => 'mysqld_safe', 'user' => 'root' );
        print check_service( 'service' => 'mysqld',      'user' => 'mysql' );
    }
}
elsif ($check) {
    exit if $disabled;
    $ENV{'HOME'} = ( getpwnam('root') )[7];
    symlink_mysql_socket();
    checkmysqlpass();

    use Socket;

    my $hasmysql = 0;
    my $mysqlok  = 0;

    eval {
        require DBD::mysql;
        $hasmysql = 1;
    };

    my $dbpassword = Cpanel::MysqlUtils::getmydbpass('root');    #read from /root/.my.cnf

    if ( $hasmysql && $dbpassword ) {
        eval {
            local $SIG{__WARN__} = sub {
                my $err = join( ' ', @_ );
                if ( $err =~ /not support authentication protocol/i ) {
                    if ( my $pid = fork() ) {
                        waitpid( $pid, 0 );
                    }
                    else {
                        open( STDOUT, '>', '/dev/null' );
                        open( STDERR, '>', '/dev/null' );
                        open( STDIN,  '<', '/dev/null' );
                        exec( "/scripts/perlinstaller", "--force", "Bundle::DBD::mysql" );
                        exit;
                    }
                }
            };
            local $SIG{"ALRM"} = sub {
                die "mysql connection timed out\n";
            };
            alarm(30);
            my $dbh = DBI->connect( 'DBI:mysql:mysql:localhost', 'root', $dbpassword );
            alarm(0);
            unless ($dbh) {
                die("Can't Connect");
            }
            $dbh->disconnect();
            $mysqlok = 1;
        };
    }

    if ( !$mysqlok ) {
        my $mysqladmin = find_mysqladmin();
        eval {
            local $SIG{'ALRM'} = sub {
                die "mysql connection timed out;";
            };
            alarm(30);
            my $mysqlstatus = Cpanel::SafeRun::Errors::saferunallerrors( $mysqladmin, 'status' );
            alarm(0);
            if ( $mysqlstatus =~ m/uptime/i ) {
                $mysqlok = 1;
            }
        };
    }

    if ( !$mysqlok ) {
        print "mysql has failed\n";
    }
}

sub get_socket {
    my $realsocket;
    foreach my $socket (@SOCKETPTS) {
        if ( -e $socket && !-l $socket && -S $socket ) {
            $realsocket = $socket;
            last;
        }
    }
    return $realsocket;
}

sub symlink_mysql_socket {
    my $realsocket = get_socket();

    if ( !$realsocket ) {
        foreach my $socket (@SOCKETPTS) {
            unlink $socket;
        }
    }
    else {
        foreach my $socket (@SOCKETPTS) {
            next if $socket eq $realsocket;
            my @DIR = split /\//, $socket;
            pop @DIR;
            my $dir = join '/', @DIR;
            next if !-d $dir;
            my $link = calclink( $realsocket, $socket );
            if ( !-e $socket ) {
                unlink $socket;
                symlink $link, $socket;
            }
            elsif ( -l $socket ) {
                my $link_target = readlink($socket);
                if ( $link_target ne $link ) {
                    unlink $socket;
                    symlink $link, $socket;
                }
            }
        }
    }
    return $realsocket;
}

sub calclink {
    my ( $src, $dest ) = @_;
    my @DDEST = split( /\//, $dest );
    my @DD;
    for ( my $i = 1; $i < $#DDEST; $i++ ) {
        push( @DD, '..' );
    }
    return ( join( '/', @DD ) . $src );
}

sub checkmysqlpass {
    return if $ENV{'MYSQLCCHK'} eq '1';
    if ( -x '/scripts/mysqlconnectioncheck' ) {
        nooutputsystem('/scripts/mysqlconnectioncheck');
    }
}