Current File : //scripts/check_mysql
#!/usr/local/cpanel/3rdparty/bin/perl

#                                      Copyright 2024 WebPros International, LLC
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited.

package scripts::check_mysql;

use strict;
use warnings;

use Cpanel::Services::Enabled        ();
use Cpanel::ConfigFiles              ();
use Cpanel::Daemonizer::Tiny         ();
use Cpanel::FileUtils::Open          ();
use Cpanel::FindBin                  ();
use Cpanel::DB::Reserved             ();
use Cpanel::MysqlUtils::MyCnf::Basic ();
use Cpanel::MysqlUtils::Dir          ();
use Cpanel::Alarm                    ();
use Cpanel::Unix::PID::Tiny          ();
use Cpanel::Imports;

exit script(@ARGV) unless caller;

sub report_errors {
    my ($errors) = @_;

    require Cpanel::Notify;
    Cpanel::Notify::notification_class(
        'class'            => 'Check::MySQL',
        'application'      => 'Check::MySQL',
        'constructor_args' => [
            'origin' => 'check_mysql',
            'report' => $errors,
        ]
    );

    return;
}

sub run_mysqlcheck {
    my ( $mysqlcheck, $db ) = @_;

    my @output = `LANG=C $mysqlcheck -u root -m --silent --databases $db 2>&1`;
    return @output;
}

sub daemon_process {
    my ($uxpd) = @_;
    $uxpd->pid_file('/var/run/check_mysql.pid');    # update our pid file to new sporked PID

    # These are the databases we analyze
    my @databases = grep { !m/^pg_/ && !m/^postgres$/ && !m/^test$/ } Cpanel::DB::Reserved::get_reserved_database_names();

    my $timeout_seconds = 64800;                    # 64800 seconds == 18 hours
    my $mysqlcheck      = Cpanel::FindBin::findbin("mariadb-check") || Cpanel::FindBin::findbin("mysqlcheck");
    my $mysqldir        = Cpanel::MysqlUtils::Dir::getmysqldir()    || '/var/lib/mysql';
    my %errors;
    my %processed;
    my $ret = eval {

        # must go out of scope to stop and clean up, ick on a stick
        my $timeout = Cpanel::Alarm->new( $timeout_seconds, sub { die "time out\n" } );
        for my $db (@databases) {
            if ( $db ne 'mysql' && !-d "$mysqldir/$db" ) {    # if mysql is missing then @output contains an error
                $processed{$db} = 1;
                next;
            }

            logger->info("starting mysqlcheck on $db (PID $$)");
            my @output = run_mysqlcheck( $mysqlcheck, $db );
            if ( grep { /error: 2002: Can't connect/ } @output ) {
                logger->warn("mysqlcheck can't connect to MySQL");
                return 0;
            }
            logger->info("mysqlcheck of $db is finished (PID $$)");
            my $oops = purge_warnings( \@output );
            if ($oops) {
                logger->warn("mysqlcheck found errors on $db: $oops");
                $errors{$db} = $oops;
            }
            else {
                logger->info("mysqlcheck found no errors on $db");
            }
            $processed{$db} = 2;
        }
        return 1;
    };
    return if defined $ret && $ret == 0;

    for my $db (@databases) {
        next if exists $processed{$db};
        next if $db ne 'mysql' && !-d "$mysqldir/$db";    # in case the timeout happened right before $processed{$db} = 1; we just won a race!
        my $timeout_hours = $timeout_seconds / 60 / 60;
        $errors{$db} = "not checked because mysqlcheck has been running for $timeout_hours hours (large data? $mysqldir partition full?)";
    }

    if ( keys %errors ) {
        report_errors( \%errors );
    }

    return;
}

sub script {
    local $ENV{'HOME'} = '/root';

    die "/usr/local/cpanel/scripts/check_mysql is currently disabled.\n" if -e '/etc/check_mysql_disable';

    die "MySQL is disabled.\n" unless Cpanel::Services::Enabled::is_enabled('mysql');

    # This script is not written in a way so as to support remote mysql servers
    die "Remote MySQL database servers are not supported.\n" if Cpanel::MysqlUtils::MyCnf::Basic::is_remote_mysql();

    # this can be an expensive and thus time consuming thing so only allow one run at a time and give it a large timeout (via $timeout_seconds)
    my $uxpd = Cpanel::Unix::PID::Tiny->new();
    die "/usr/local/cpanel/scripts/check_mysql is currently running.\n" if !$uxpd->pid_file('/var/run/check_mysql.pid');

    my $pid = Cpanel::Daemonizer::Tiny::run_as_daemon(
        sub {
            Cpanel::FileUtils::Open::sysopen_with_real_perms( \*STDERR, $Cpanel::ConfigFiles::CPANEL_ROOT . '/logs/error_log', 'O_WRONLY|O_APPEND|O_CREAT', 0600 );
            open( STDOUT, '>&', \*STDERR ) || warn "Failed to redirect STDOUT to STDERR";
            daemon_process($uxpd);
        }
    );

    print locale->maketext( "“[_1]” will complete in the background (process ID [_2]).", 'check_mysql', $pid ) . "\n";

    return 0;
}

sub purge_warnings {
    my ($output_ar) = @_;

    my $full_output = '';

    # Loop through each line get rid of warnings
    my $previous_line = '';
    foreach my $line (@$output_ar) {
        chomp $line;

        # Skip the warnings and a non-Error-error: http://bugs.mysql.com/bug.php?id=30487
        if ( $line =~ /^([iI]nfo|[nN]ote|[wW]arning)/ || $line =~ m/Error\s*:\s*You can't use locks with log tables\./ ) {
            $previous_line = '';
            next;
        }

        # We only allow a line if it is not followed by a warning
        $full_output .= $previous_line . "\n" if $previous_line;
        $previous_line = $line;
    }

    $full_output .= $previous_line . "\n" if $previous_line;
    return $full_output;
}
Uncategorized – Página 4

Categoría: Uncategorized

  • Официальное гелиостат букмекерской фирмы МЕЛБЕТ, доступ для сайту и вербовое во кабинет пользователя

    Альтернативный адрес «Мелбет» используют, ежели базальный интернет-бизнес-ресурс лишать трудится. Болтаем, можно ли зеркало для забавы нате сайте российского букмекера «Мелбет», в каком месте выкапать бесперебойную высылку в Нашей родины, какими средствами отличаются легальная вдобавок оффшорная БК. Букмекерская администрация Melbet по части избавляю прошел слух одним из фаворитов рынка.

  • Anmeldung, Bonusse und Registration

    Fonbet Casino bietet angewandten Willkommensbonus durch so weit wie 500% unter anderem €3000 je Ihre ersten fünf Einzahlungen, zusammen mit 225 Freispielen. Nachfolgende Mindesteinzahlung beginnt inside 5 € für ein großteil Methoden, inbegriffen Kryptowährungen, dabei Visa, Mastercard unter anderem Bitcoin min. 10 € gebieten. Bonusgelder ferner Freispiele nichts abbekommen dieser 35-fachen Wettanforderung & zu tun…

  • Lade nachfolgende neueste Version ihr Vox Spielbank App in Teutonia hinunter

    Es gewalt dies Zum besten geben dahinter einem Wonne, abzüglich wirklich so man lange Anleitungen decodieren erforderlichkeit. Unser Bevorzugung ein richtigen Kasino-App kann den Unterschied zwischen einem durchschnittlichen & einem tollen Spielerlebnis überspannen. Unser Vox Kasino App bietet viele Vorteile, die eltern von folgenden Anwendungen abheben. VOX Spielsaal bietet Jedermann Entzückung, Spannung ferner echte Gewinnchancen…

  • Plinko Gambling enterprises Real money $twenty-five Bonus

    Once you increase the amount of contours, you will have far more dots, to help make they more complicated so you can win but can and head to higher payouts. It’s like picking a great higher volatility position the place you rating big victories when deciding to take high-exposure. Rather, you need a great multiplier more than 1x…

  • Закачать Мелбет на Андроид, официальное приложение Melbet безвозмездно

    Мелбет предлагает разнообразные бонусы для привлечения игроков. Ко ним дотрагиваются поздравительные бонусы в видах скачать мелбет казино пруд получите и распишитесь спорт, бесплатные ставки и возвраты аккумов. Зли него также есть VIP-программа, которое награждает постоянных заказчиков кэшбэком.

  • Рабочее гелиостат Мелбет в 2025 годе

    Гелиостат должностного сайта Мелбет – сие единственный способ избродить блокировку. Исходя из отдачи занятия надзорных организаций России, журнал надеюсь работать через нескольких периодов вплоть до малых лун. Выкапать жизненную ссылку возьмите зеркало Melbet можно через должностной веб-журнал или запросить у службы помощи. Также подписка нате рассылку Melbet позволит благовременно выдавать на-гора обновленные ссылки.

  • Зеркало Мелбет Рабочая ссылка на сегодня Зайти получите и распишитесь Мелбет прямо сейчас

    Вторая – международный букмекер Melbet, авралящий в сфере лицензии Ликер. Вопреки наличие визового бумаги, говорят конспиративным.

  • MelBet Казино Должностной Журнал, Регистрация а также Вход

    Передом созданием заказы возьмите вывод надобно мелбет зеркало официальный сайт зеркало вернуть абсолютно все деятельные бонусы, ато они будут аннулированы. Алмазообработка заказов в большом количестве случаев одалживает до 24 времен.

  • Игорный дом Мелбет 2025 Вербовое на официальный веб-журнал MelBet слоты

    Операторы всегда сообщают геймерам актуальные адреса, которые помогают исходить блокировку. Также выведать адрес зеркала можно из рассылки нате электронную почту. Водить выигрыши в букмекерской конторе бог велел нате обстановка, кои использовались для пополнения бессчетно. Это правило было введено чтобы предотвращения афер. Обналичить средства повышают бетторы, прошедшие верификацию.

  • Мелбет казино широкий ассортимент слотов получите и распишитесь официальном сайте Melbet

    Бесплатно закачать приложение Melbet casino вы можете вдобавок получите и распишитесь телефон (Android, iOS), а также нате аэропланшет, плюс доступна вариация для Пк. Поздравительные фриспины начисляются в видах безвозмездной игры в Juicy Fruits Sunshine Rich. Они станут приемлемы только после того, а как игрок получит а еще прокрутит по части вейджеру денежную часть подарка.