Уведомление по электронной почте, когда диск достигает определенного процента? (Laravel) - PullRequest
1 голос
/ 17 февраля 2020

Я бы хотел иметь возможность автоматически контролировать мои диски с помощью уведомлений по электронной почте. Я использую Laravel (и, следовательно, должна быть возможность запланировать задачу для проверки), но я не уверен, как go проверить доступный размер диска с помощью кода Laravel / PHP. Любые идеи?

Я нашел эту статью (но это не совсем то, что я хочу, поскольку он использует оболочку напрямую для отправки электронных писем, и я хочу запланированную задачу laravel для отправки электронных писем всякий раз, когда он находит диск на указанный процент): https://www.cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

Вы можете использовать disk_free_space () и disk_total_space ()

<?php
   define('MAX_LIMIT', 90);

   $diskRoot = "/"; // for unix/linux in case of windows use "C:" / "D:"

   $perSpace = (disk_free_space($diskRoot) / disk_total_space($diskRoot)) * 100;
   if(MAX_LIMIT < $perSpace) {
       //send email from here
   }
?>

2 голосов
/ 17 февраля 2020

Один хороший способ сделать это - сначала подготовить функцию для проверки дискового пространства.

function spaceLimit($limitPercent) {
    $drive = "/";
    $space = (disk_free_space($drive) / disk_total_space($drive)) * 100;
    return $limitPercent < $space;
}

Затем отправьте электронное письмо после проверки на указанный c внутренний (в файле app/Console/Kernel.php).

protected function schedule(Schedule $schedule)
{
    // Ensure queue:work is running
    $schedule->call(function() {
        // 90% and more space used
        if (spaceLimit(90)) {
            Mail::to('admin@me.com')->send(/* Some Mailable Class here */);
        }
    })->everyFiveMinutes(); // Change interval here
}

Конечно, функцию spaceLimit можно сохранить в том же файле, или в другом, или где угодно.
Кроме того, вы можете представить себе Класс событий для удобной обработки других видов уведомлений позже (таких как SMS, Pu sh Уведомление, что угодно ..).

Не забудьте, что вам потребуется настроить cron для выполнения ваших задач. Crontab:

* * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1

И, если ваши электронные письма находятся в очереди, вам также нужно будет запустить очередь:

php artisan queue:listen
2 голосов
/ 17 февраля 2020

Вы можете использовать disk_free_space () . Возвращает доступное пространство в файловой системе или разделе диска:

<?php
  // $df contains the number of bytes available on "/"
  $df = disk_free_space("/");

  // On Windows:
  $df_c = disk_free_space("C:");
  $df_d = disk_free_space("D:");
?>

Если вы хотите проверить общее пространство вашего диска, используйте disk_total_space ()

<?php
  // $ds contains the total number of bytes available on "/"
  $ds = disk_total_space("/");

  // On Windows:
  $ds = disk_total_space("C:");
  $ds = disk_total_space("D:"); 
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...