Skip to content

Instantly share code, notes, and snippets.

@maximal
Last active November 26, 2019 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maximal/b2626f95da47ddebecdab6db5f14a12c to your computer and use it in GitHub Desktop.
Save maximal/b2626f95da47ddebecdab6db5f14a12c to your computer and use it in GitHub Desktop.
Скрипт для проверки свободного места на диске
<?php
/**
* Скрипт для проверки свободного места на диске.
*
* Запуск в кроне (каждый день в 7 утра):
* ```
* 0 7 * * * php /path/to/check-disk-space.php
* ```
*
* @author MaximAL
* @date 2019-11-26
* @time 11:43
* @since 2019-11-26 Первая версия.
*
* @copyright ©  MaximAL, Sijeko 2019
* @link https://maximals.ru
* @link https://sijeko.ru
*/
// Разделы, которые проверяем
$partitions = [
'/',
'/home',
'/srv',
'/run',
];
// Порог, меньше которого шлём уведомление
$gbMin = 5;
// Выводить ли сообщение в консоль (чтобы его отослал cron с использованием MAILTO)
$textOut = true;
// Отправлять ли сообщение самостоятельно (функцией `mail()`)
$mailSend = true;
// Получатели письма
$mailTo = 'admin@example.org, maximal@example.org';
// Тема письма (добавляем к нему имя сервера)
$mailSubject = '[' . gethostname() . '] Мало места на диске';
// Начальный текст письма
$mailHeader =
'В этих разделах сервера `' . gethostname() .
'` осталось меньше ' . $gbMin . ' ГиБ свободного места:';
// Поехали!
$timeStart = microtime(true);
$alerts = [];
foreach ($partitions as $partition) {
$gBytes = disk_free_space($partition) / 1024.0 / 1024.0 / 1024.0;
if ($gBytes < $gbMin) {
$alerts []= '* ' . $partition . ': ' . round($gBytes, 1) . ' ГиБ';
}
}
if (count($alerts)) {
$message = $mailHeader . PHP_EOL . implode(PHP_EOL, $alerts) . PHP_EOL;
if ($mailSend) {
mail($mailTo, $mailSubject, $message);
}
if ($textOut) {
echo $message;
}
}
$timeDiff = microtime(true) - $timeStart;
//echo 'Time: ', sprintf('%.3f sec.', $timeDiff), PHP_EOL;
@sergks
Copy link

sergks commented Nov 26, 2019

Красота! 😍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment